【问题标题】:AWS Athena on S3 bucket with some JSON files带有一些 JSON 文件的 S3 存储桶上的 AWS Athena
【发布时间】:2019-11-28 23:50:26
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢詹姆斯。这在文档中的任何地方吗?
    • 不是我发现的。我不相信 Hive 表定义支持该概念(请参阅 11269203 discussion ),并且我没有找到有关从选择中排除文件的 Presto 功能的文档。
    【解决方案2】:

    最近我发现如果你把文件放在优先级上 _ 那么 hive 会忽略它们。因此,在您的示例中,您可以将文件重命名为 _data.bin,然后该文件将被忽略。

    【讨论】:

      猜你喜欢
      • 2020-09-19
      • 2019-04-06
      • 2017-06-11
      • 2019-04-28
      • 1970-01-01
      • 2018-04-25
      • 2017-09-17
      • 2020-05-29
      • 2020-01-12
      相关资源
      最近更新 更多