2

我在AWS設置ETL管道如下ETL管道在AWS與S3作爲datalake如何處理增量更新

input_rawdata - > S3 - >拉姆達 - >觸發火花ETL(通過AWS膠)腳本 - >輸出(s3,parquet文件)

我的問題是讓我們假設上面是數據的初始負載,我該如何設置運行每天(或每小時)增加新行或更新現有記錄的增量批次

a。)我如何繼續添加到相同的s3鑲木地板文件。以便隨後的presto db查詢產生最新的數據。

b。)如何處理重複記錄獲取查詢的最新時間戳。

在火花腳本中,我是否需要創建Hive外部表,其源代碼爲s3並在presto db中使用?

感謝您的任何輸入。

回答

0

首先不要試圖追加到s3中存在的文件,而是創建具有多個記錄的文件。

要查詢s3的分析,您可以使用AWS Athena來描述數據,其數據目錄是Hive Metastore兼容的。

要刪除重複項,您可以通過Athena編寫SQL查詢來查詢唯一記錄集。

0

您可以在ETL作業中定義作業書籤。

書籤保留了s3文件處理的軌跡,所以一旦您的歷史負載得到處理,並且您在s3上轉儲新文件,那麼只有新文件將由etl作業處理,並將這些文件標記爲在內部處理。

你可以用這種方式處理增量數據。

0

由於您已經在使用Lambda和Glue,因此您可以使用Kinesis和KCL以流的形式捕獲數據,或使用Spark Streaming,因爲您有Spark腳本。這些選項都可以爲您提供您正在尋找的增量輸入。將實時流傳輸到現有數據庫時,數據損壞的風險較低。

然後你可以通過你的ETL過程與膠水傳遞數據。您可以在Glue中安排或鏈接ETL作業,並且可以將轉換後的數據加載到AWS存儲桶中。 Glue是面向批處理的,但最小間隔時間爲5分鐘,並且Kinesis執行第一步,然後將完成的數據傳遞給Glue,您仍然可以進行增量更新。你可以查看這個獲得更多的資源和想法ETL architecture

對於任何重複數據,如果需要,可以在已完成的數據集上運行SQL-ish查詢。