AWS雅典娜S3存储桶上有一些JSON文件

问题描述:

试用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文件导致游标错误,或者其他事情正在发生。有没有其他人遇到过这种情况,或者可以告诉我发生了什么?

是的,Athena(Presto,Hive)要求存储在表LOCATION中的文件具有一致的格式。我相信你需要移动这些文件为每个底层数据模式创建单独的表。

+0

谢谢詹姆斯。这是在任何地方的文档? –

+0

不是我找到的。我不相信Hive表定义支持该概念(请参阅[11269203讨论](http://*.com/q/11269203)),并且我没有找到Presto功能的文档,该功能会从文件中排除文件选择。 – James