2017-03-14 36 views
1

Athena使用S3表中的字段创建临时表。我已经使用JSON数据完成了这项工作。你能帮助我如何使用实木复合地板数据创建表格吗?如何查询来自Amazon Athena的地板数据?

我曾尝试以下:

  1. 转换的样本JSON数据到镶数据。
  2. 将镶木地板数据上传到S3。
  3. 使用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"} 
+0

请您分享您的雅典娜餐桌定义?你用什么工具来生成Parquet文件? – James

+0

如果您执行'SELECT * FROM foo LIMIT 5',它是否会返回任何数据?如果不是,那么你的表定义无效。 –

回答

1

如果您的数据已成功存储在木地板的格式,那么您需要创建引用这些文件表定义。

下面是用木地板文件的示例声明:

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,做解释亚马逊雅典娜使用压缩和分区数据的好处的出色拍摄。

0

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

2

如果你的表定义是有效的,但没有得到任何行,试试这个

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

MSCK REPAIR TABLE {tablename}