2017-03-14 22 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}