【问题标题】:How to load key-value pairs (MAP) into Athena from Parquet file?如何从 Parquet 文件将键值对 (MAP) 加载到 Athena?
【发布时间】:2020-06-17 19:27:44
【问题描述】:

我有一个装满 .gz.parquet 文件的 S3 存储桶。我想让它们在 Athena 中可以访问。为此,我在 Athena 中创建了一个指向 s3 存储桶的表:

CREATE EXTERNAL TABLE user_db.table (
pan_id bigint,
dev_id bigint,
parameters ?????, 
start_time_local bigint
                                     )
STORED AS PARQUET
LOCATION ‘s3://bucket/path/to/folder/containing_files/’
tblproperties (“parquet.compression”=“GZIP”)
;

如何正确指定参数列的数据类型?

使用# parquet-tools schema,我看到数据文件的以下架构:

  optional int64 pan_id;
  optional int64 dev_id;
  optional group parameters (MAP) {
    repeated group key_value {
      required binary key (UTF8);
      optional binary value (UTF8);
    }
  }
  optional int96 start_time_local;

使用# parquet-tools head,我看到一行数据的值如下:

pan_id = 1668490
dev_id = 6843371
parameters:
.key_value:
..key = doc_id
..value = c2bd3593d7015fb912d4de229a302379babcf6a00a203fcf
.key_value:
..key = variables
..value = {“video_id”:“2313675068886132",“surface”:“post”}
start_time_local = QFOHvvYvAAAzhCUA

感谢您提供的任何帮助。我无法找到 CREATE TABLE 中使用的 MAP 数据类型的良好文档。

【问题讨论】:

  • 你能分享一些记录很少的实际镶木地板数据文件吗?

标签: amazon-web-services key-value parquet create-table amazon-athena


【解决方案1】:

映射被声明为map<string,string>(对于字符串到字符串的映射,其他类型也是可能的),在您的情况下,整个表 DDL 将是:

CREATE EXTERNAL TABLE user_db.table (
  pan_id bigint,
  dev_id bigint,
  parameters map<string,string>, 
  start_time_local bigint
)
STORED AS PARQUET
LOCATION 's3://bucket/path/to/folder/containing_files/'
tblproperties ("parquet.compression" = "GZIP")

地图类型在the list of Athena data types的列表中倒数第二个

【讨论】:

    【解决方案2】:

    您可以使用 AWS Glue Crawler 从 Parquet 文件中自动派生架构。

    定义 AWS Glue 爬虫:https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-11
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-01
      • 2012-09-20
      • 1970-01-01
      相关资源
      最近更新 更多