Parquet 二进制 UTF8 作为配置单元上的字符串

Parquet binary UTF8 as string on hive

有一个镶木地板文件,其中有一个名为 abcbinary (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 模式定义中称为二进制)。