如何从 Amazon Athena 查询镶木地板数据?

Posted

技术标签:

【中文标题】如何从 Amazon Athena 查询镶木地板数据?【英文标题】:How to Query parquet data from Amazon Athena? 【发布时间】:2017-08-04 19:30:38 【问题描述】:

Athena 使用 S3 表中的字段创建一个临时表。我已经使用 JSON 数据完成了这项工作。您能帮我了解如何使用 parquet 数据创建表格吗?

我尝试了以下方法:

    将示例 JSON 数据转换为镶木地板数据。 已将 parquet 数据上传到 S3。 使用 JSON 数据列创建了临时表。

通过这样做,我可以执行查询,但结果为空。

这种方法是否正确,或者还有其他方法可以用于镶木地板数据?

示例 json 数据:

"_id":"0899f824e118d390f57bc2f279bd38fe","_rev":"1-81cc25723e02f50cb6fef7ce0b0f4f38","deviceId":"BELT001","timestamp":"2016-12-21T13:04:10:066Z","orgid":"fedex","locationId":"LID001","UserId":"UID001","SuperviceId":"SID001",
"_id":"0899f824e118d390f57bc2f279bd38fe","_rev":"1-81cc25723e02f50cb6fef7ce0b0f4f38","deviceId":"BELT001","timestamp":"2016-12-21T13:04:10:066Z","orgid":"fedex","locationId":"LID001","UserId":"UID001","SuperviceId":"SID001"

【问题讨论】:

您能分享一下您的 Athena 表定义吗?您使用什么工具生成 Parquet 文件? 如果您执行SELECT * FROM foo LIMIT 5,它会返回任何数据吗?如果不是,那么您的表定义无效。 【参考方案1】:

步骤: 1. 创建你的 my_table_json 2.将数据插入my_table_json(验证表'LOCATION'中是否存在创建的json文件) 3. create my_table_parquet:与 my_table_json 相同的 create 语句,但需要添加 'STORED AS PARQUET' 子句。 4. 运行: INSERT INTO my_table_parquet SELECT * FROM my_table_json

【讨论】:

【参考方案2】:

如果您的数据已成功以 Parquet 格式存储,那么您将创建一个引用这些文件的表定义。

这是一个使用 Parquet 文件的示例语句:

CREATE EXTERNAL TABLE IF NOT EXISTS elb_logs_pq (
  request_timestamp string,
  elb_name string,
  request_ip string,
  request_port int,
  ...
  ssl_protocol string )
PARTITIONED BY(year int, month int, day int) 
STORED AS PARQUET
LOCATION 's3://athena-examples/elb/parquet/'
tblproperties ("parquet.compress"="SNAPPY");

此示例取自 AWS 博客文章 Analyzing Data in S3 using Amazon Athena,该文章很好地解释了在 Amazon Athena 中使用压缩和分区数据的好处。

【讨论】:

可以排除分区吗?例如,仅包括第 1、3、5 天并排除所有其他日期。 我假设表数据在 s3 上的数据发生变化时更新?这意味着 A)当 s3 上有删除规则时,表中的数据被删除 B)当 S3 上添加新日期时,数据被添加到表中【参考方案3】:

如果您的表定义有效但未获取任何行,请尝试此操作

-- MSCK REPAIR TABLE 命令将所有分区加载到表中。 -- 此命令可能需要一段时间才能运行,具体取决于要加载的分区数。

MSCK 修复表 tablename

【讨论】:

以上是关于如何从 Amazon Athena 查询镶木地板数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何从配置单元表插入分区表(作为镶木地板)?

如何使用 AvroParquetWriter 从 scala 案例类制作镶木地板文件?

如何从 spark sql 访问本地镶木地板文件?

如何从镶木地板文件创建表格

重命名 Athena 中的分区列名称

如何将单个镶木地板文件从 s3 读入 dask 数据帧?