带有一些JSON文件的S3存储桶上的AWS Athena

时间:2016-12-02 22:41:56

标签: json amazon-web-services amazon-s3 amazon-athena

使用AWS Athena进行实验。我试图从S3存储桶创建一个具有如下文件结构的表:

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: java.io.ByteArrayInputStream@2da7f4ef; line: 1, column: 0]) at [Source: java.io.ByteArrayInputStream@2da7f4ef; line: 1, column: 3]

在这种情况下,AWS Athena是否要求存储桶中的所有文件都是JSON?我不确定.bin文件是否导致游标错误,或者是否正在进行其他操作。有没有其他人遇到这个,或者可以告诉我发生了什么事?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

最近我发现,如果将文件放在优先级_,则配置单元将忽略它们。因此,在您的示例中,您可以将文件重命名为_data.bin,然后该文件将被忽略。