繁体   English   中英

以 Kinesis Firehose output 格式将 DynamoDB 数据传输到 S3

[英]DynamoDB data to S3 in Kinesis Firehose output format

Kinesis data firehose 有一种默认格式,可以将文件添加到 S3 存储桶中的单独分区,如下所示: s3://bucket/prefix/yyyy/MM/dd/HH/file.extension

我创建了事件流以使用 Firehose 将数据从 DynamoDB 转储到 S3。 中间有一个转换 lambda 将 DDB 记录转换为 TSV 格式(制表符分隔)。
所有这些都添加到已经包含大量数据的现有表中。 我需要将现有数据从 DynamoDB 回填到 S3 存储桶,以保持格式与现有 Firehose output 样式的奇偶校验。

我试过的解决方案
第 1 步:使用 DDB 导出功能将表导出到 S3。 使用 Glue 爬虫创建数据目录表。
第 2 步:使用 Athena 的CREATE TABLE AS SELECT Query 来模仿由中间 Lambda 完成的转换并将该 Output 存储到 S3 位置。
第 3 步:但是,Athena CTAS 应用无法取消的默认压缩。 所以我写了一个 Glue Job,它从上一个表中读取并写入另一个 S3 位置。 该作业还负责添加基于年/月/日/小时的分区,就像使用 Firehose 的格式一样,并写入解压缩的 S3 制表符分隔格式文件。

但是,问题在于 Glue 创建的 Hive 样式分区如下所示: s3://bucket/prefix/year=2021/month=02/day=02/ 我需要改为匹配流水块样式的 S3 分区。 我正在寻找一种方法来帮助实现这一目标。 找不到使用 Glue 添加块样式分区的方法。 我的另一种方法是,使用 AWS CLI S3 mv命令将所有这些数据移动到具有正确文件名的单独文件夹中,该文件名不干净且未优化。

离开我最终在这里实施的解决方案,以防它对任何人有帮助。

我创建了一个 Lambda 并在此存储桶上添加了 S3 事件触发器。 Lambda 完成了将文件从 Hive 式分区 S3 文件夹移动到结构正确的块式 S3 文件夹的工作。

Lambda 使用从 boto3 s3Client 复制和删除 function 来实现相同的目的。 它就像一个魅力,即使我喜欢 > 10^6 output 文件拆分到不同的分区。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM