【问题标题】:AWS Glue crawling JSON lines data in S3AWS Glue 在 S3 中抓取 JSON 行数据
【发布时间】:2021-04-22 13:21:51
【问题描述】:

我的 S3 中有这种类型的数据:

{"version":"0","id":"c1d9e9a4-25a2-a0d8-2fa4-b062efec98c4","detail-type":"OneTypeee","source":"OneSource","account":"123456789","time":"2021-01-17T12:35:17Z","region":"eu-central-1","resources":[],"detail":{"Key1":"Value1"}}
{"version":"0","id":"c13879a4-2h32-a0d8-9m33-b03jsh3cxxj4","detail-type":"OtherType","source":"SomeMagicSource","account":"123456789","time":"2021-01-17T12:36:17Z","region":"eu-central-1","resources":[],"detail":{"Key2":"Value2", "Key22":"Value22"}}
{"version":"0","id":"gi442233-3y44a0d8-9m33-937rjd74jdddj","detail-type":"MoreTypes","source":"SomeMagicSource2","account":"123456789","time":"2021-01-17T12:45:17Z","region":"eu-central-1","resources":[],"detail":{"MagicKey":"MagicValue", "Foo":"Bar"}}

请注意,我添加了新行以使其更具可读性。实际上,Kinesis Firehose 生成这些批次时没有换行符。

当我尝试对这种类型的数据运行 AWS Glue 爬虫时,它只爬取第一个 JSON 行,仅此而已。我知道这一点,因为当我运行 Athena SQL 查询时,我总是只得到一个(第一个)结果。

如何使胶水爬虫正确地爬取这些数据并创建正确的架构,以便我可以查询所有这些数据?

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-glue amazon-athena amazon-kinesis-firehose


    【解决方案1】:

    我无法通过 JSON 行数据运行爬虫,但只需在 Glue Table Serde 属性中指定数据为 JSON 即可。 Glue 自动按换行符拆分 JSON,我可以在 Glue 作业中查询数据。

    这是我的表格的属性。另外,我的 json 行数据被压缩了,所以在这里你可以忽略 compressionType 属性。

    【讨论】:

    • 这项工作是否按预期工作?对我来说,Glue 只读取文件中的第一个 JSON 对象。
    • 对我来说也一样,它被正确标记为 JSON
    【解决方案2】:

    我遇到了同样的问题,对我来说,原因是 json 记录被写入 S3 存储桶而没有下一行字符:\n

    确保您的 json 记录的末尾附加了\n。在 java 的情况下,是这样的:

    PutRecordRequest request = new PutRecordRequest()
        .withRecord(new Record().withData(ByteBuffer.wrap((json + "\n").getBytes())))
        .withDeliveryStreamName(streamName);
    amazonKinesis.putRecordAsync(request);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-15
      • 2019-11-13
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      相关资源
      最近更新 更多