Parquet 二进制 UTF8 作为配置单元上的字符串
Parquet binary UTF8 as string on hive
有一个镶木地板文件,其中有一个名为 abc
的 binary (UTF8)
列。
是否可以在包含相同列 abc
的配置单元上创建 external
table,但转换为 string
?
拼花文件的结构:
$ parquet-tools schema ~/Downloads/dataset.gz.parquet
message spark_schema {
optional binary abc (UTF8);
}
显然,您可以简单地将 string
指定为列的类型,它会得到处理。
CREATE EXTERNAL TABLE `dataset`(
`abc` string)
STORED AS parquet
LOCATION
'...';
涉及三种不同的类型:
- Hive 中的 table 有一个 SQL 架构。每列都有一个类型,例如 STRING 或 DECIMAL。每个 table(或分区,如果它是分区的 table)由多个文件组成,这些文件必须具有相同的文件格式,例如 PLAINTEXT、AVRO 或 PARQUET。
- 每个单独的文件也将具有类型信息(PLAINTEXT 除外)。对于 Parquet,这意味着另外两个级别:
- physical type描述存储大小,例如INT32,BYTE_ARRAY或FIXED_LEN_BYTE_ARRAY.
- logical type 告诉应用程序如何解释数据,例如 UTF8 或 DECIMAL。
Hive 的 STRING 列类型存储为具有 UTF8 逻辑类型注释的 BYTE_ARRAY 物理类型(在 Parquet 模式定义中称为二进制)。
有一个镶木地板文件,其中有一个名为 abc
的 binary (UTF8)
列。
是否可以在包含相同列 abc
的配置单元上创建 external
table,但转换为 string
?
拼花文件的结构:
$ parquet-tools schema ~/Downloads/dataset.gz.parquet
message spark_schema {
optional binary abc (UTF8);
}
显然,您可以简单地将 string
指定为列的类型,它会得到处理。
CREATE EXTERNAL TABLE `dataset`(
`abc` string)
STORED AS parquet
LOCATION
'...';
涉及三种不同的类型:
- Hive 中的 table 有一个 SQL 架构。每列都有一个类型,例如 STRING 或 DECIMAL。每个 table(或分区,如果它是分区的 table)由多个文件组成,这些文件必须具有相同的文件格式,例如 PLAINTEXT、AVRO 或 PARQUET。
- 每个单独的文件也将具有类型信息(PLAINTEXT 除外)。对于 Parquet,这意味着另外两个级别:
- physical type描述存储大小,例如INT32,BYTE_ARRAY或FIXED_LEN_BYTE_ARRAY.
- logical type 告诉应用程序如何解释数据,例如 UTF8 或 DECIMAL。
Hive 的 STRING 列类型存储为具有 UTF8 逻辑类型注释的 BYTE_ARRAY 物理类型(在 Parquet 模式定义中称为二进制)。