簡體   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