【问题标题】:Best way to update the partitioning scheme of existing data delivered by Kinesis to S3?将 Kinesis 提供的现有数据的分区方案更新到 S3 的最佳方法?
【发布时间】:2022-08-08 11:45:36
【问题描述】:

我有一个 Kinesis 数据传输流配置为使用默认分区配置写入 S3:s3://${bucketname}/${prefix}/${datehour:yyyy/MM/dd/HH}/${filename}

比如s3://somebucket/backup/2022/06/01/00/example.gz(我目前正在使用gzip进行数据压缩)

为了查询这些数据,我在 Athena 中使用分区投影其中datehour 是分区键。我的数据 (JSON) 类似于:

{
   \"someKeyA\" : \"valueA\",
   \"someKeyB\" : \"valueB\",
   .
   .
   .
   \"yearMonth\" : \"2022/06\"
}

由于 Kinesis 现在支持动态 ID 分区,我想将分区键从 datehour(即 UTC 时间戳)更改为我的数据中存在的 yearMonth 值,即我的新输出 S3 位置看起来像 s3://somebucket/backup/2022/06/example。此外,我还想将记录格式转换为 Parquet 并使用 Snappy 压缩来提高查询性能。

为此,我知道我必须为我的数据创建一个新的 Kinesis 数据传输流和一个新的输出存储桶。发布后,我可以使用yearMonth 作为分区键在 Athena 中创建一个新表。

我还想将旧存储桶中的现有数据转换为新的分区方案和记录格式,以便可以通过新的 Athena 表进行查询。我能想到的一种选择是在 Athena 中使用 CREATE TABLE AS SELECT.. (CTAS) 查询,并按照新格式输出新存储桶中的现有数据。我并不完全精通 Glue,但我相信也可以运行 ETL 作业并执行类似的操作。对现有数据进行这种转换还有哪些其他(可能更好)的选择?

S3 中现有数据的总大小超过 20GB,现有对象的数量接近 100K。我更喜欢一种方法,它需要最少的开发工作,同时保持执行这种转换的成本最小。

    标签: amazon-web-services amazon-s3 amazon-athena amazon-kinesis-firehose data-partitioning


    【解决方案1】:

    (无耻的插头)

    你想要

    1. 分区
    2. 转换为镶木地板
    3. 更改分区键

      您可以使用 Decodable 以无服务器方式使用 SQL 完成所有这些工作。并且将得到完全一次保证。

      https://docs.decodable.co/docs/connector-reference-s3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 1970-01-01
      • 2020-08-20
      • 2016-06-22
      • 2018-05-20
      • 2011-11-21
      • 2018-01-12
      相关资源
      最近更新 更多