2016-12-02 152 views
4

試用AWS Athena。我試圖從一個S3桶具有文件結構,像這樣創建一個表:AWS雅典娜S3存儲桶上有一些JSON文件

my-bucket/ 
my-bucket/group1/ 
my-bucket/group1/entry1/ 
my-bucket/group1/entry1/data.bin 
my-bucket/group1/entry1/metadata 
my-bucket/group1/entry2/ 
my-bucket/group1/entry2/data.bin 
my-bucket/group1/entry2/metadata 
... 
my-bucket-group2/ 
... 

只有metadata文件是JSON文件。每一個看起來是這樣的:

{ 
    "key1": "value1", 
    "key2": "value2", 
    "key3": n 
} 

所以我試圖創建一個表:

CREATE EXTERNAL TABLE example (
    key1 string, 
    key2 string, 
    key3 int 
) 
ROW FORMAT serde 'org.apache.hive.hcatalog.data.JsonSerDe' 
LOCATION 's3://my-bucket/' 

的創建查詢成功了,但是當我嘗試查詢:

SELECT * FROM preserved_recordings limit 10; 

我得到一個錯誤:

Query 93aa62d6-8a52-4a5d-a2fb-08a6e00181d3 failed with error code HIVE_CURSOR_ERROR: org.codehaus.jackson.JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (from [Source: [email protected]; line: 1, column: 0]) at [Source: [email protected]; line: 1, column: 3] 

AWS Ath ENA需要全部桶中的文件在這種情況下是JSON?我不確定如果.bin文件導致遊標錯誤,或者其他事情正在發生。有沒有其他人遇到過這種情況,或者可以告訴我發生了什麼?

回答

2

是的,Athena(Presto,Hive)要求存儲在表LOCATION中的文件具有一致的格式。我相信你需要移動這些文件爲每個底層數據模式創建單獨的表。

+0

謝謝詹姆斯。這是在任何地方的文檔? –

+0

不是我找到的。我不相信Hive表定義支持該概念(請參閱[11269203討論](http://stackoverflow.com/q/11269203)),並且我沒有找到Presto功能的文檔,該功能會從文件中排除文件選擇。 – James