apache-hive / 3.1.1 / reference / Binary_DataType_Proposal.html

Hive 中的二进制类型

Motivation:

Hive 旨在处理大数据。通常,在这种情况下,数据中的一行可能非常宽,有数百列。有时,用户只对其中的几列感兴趣,而不想为其余列担心确切的类型信息。在这种情况下,他可能只是将这些列的类型声明为二进制,而 Hive 不会尝试解释这些列。需要注意的重要一件事是,此二进制类型不像其他系统中那样存在于 Blob 类型之后。

Syntax:

create table binary_table (a string, b binary);

{#BinaryDataTypeProposal-Howis'binary'representedinternallyinHive} Hive 内部如何表示“二进制”

Hive 中的二进制类型将在节俭中 Map 为“二进制”数据类型。
“二进制”类型的原始 Java 对象为 ByteArrayRef
“二进制”类型的 PrimitiveWritableObject 是 BytesWritable

Casting:

二进制类型不会隐式转换为任何其他类型。甚至不支持显式强制转换。

Serialization:

通过首先提取字符串的基础字节然后对其进行序列化,来对 Hive 中的字符串进行序列化。二进制类型将搭载它,并将重用相同的代码。

Transform Scripts:

与其他类型一样,二进制数据将以 String 形式发送到转换脚本。 byte []将首先以 Base64 格式编码,然后将创建一个 String 并将其发送到脚本。

Supported Serde:

ColumnarSerde
BinarySortableSerde
LazyBinaryColumnarSerde
LazyBinarySerde
LazySimpleSerde

在“二进制”类型的列上将支持分组依据和联合

JIRA:

https://issues.apache.org/jira/browse/HIVE-2380