如何从 Amazon Athena 查询 parquet 数据?

How to Query parquet data from Amazon Athena?

A​​thena 使用 S3 table 中的字段创建临时 table。我使用 JSON 数据完成了此操作。你能帮我看看如何使用 parquet 数据创建 table 吗?

我试过以下方法:

  1. 已将示例 JSON 数据转换为 parquet 数据。
  2. 已将 parquet 数据上传到 S3。
  3. 使用 JSON 列数据创建临时 table。

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

这种方法是否正确,或者是否有任何其他方法可用于 parquet 数据?

示例 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"}

步骤:
1. 创建您的 my_table_json
2. 将数据插入 my_table_json(验证在 table '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

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

这是一个使用 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 博客 post Analyzing Data in S3 using Amazon Athena,该博客很好地解释了在 Amazon Athena 中使用压缩和分区数据的好处。

如果您的 table 定义有效但未获得任何行,请尝试此

-- MSCK REPAIR TABLE 命令会将所有分区加载到 table。 -- 根据要加载的分区数量,此命令可能需要一段时间 运行。

MSCK 维修 TABLE {table姓名}