如何从 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 查询镶木地板数据?的主要内容,如果未能解决你的问题,请参考以下文章