簡體   English   中英

是否可以在 Azure 數據塊中使用基於鑲木地板文件名的增量表跟蹤器?

[英]Is it ok to use a delta table tracker based on parquet file name in Azure databricks?

今天在工作中,我看到了一個基於文件名的delta lake tracker。 通過 delta tracker,我的意思是一個 function,它定義了一個 parquet 文件是否已經被攝取。

該代碼將檢查哪些文件(來自 delta 表)尚未被攝取,然后使用以下命令讀取 delta 表中的 parquets 文件: spark.createDataFrame(path,StringType())

在使用Delta tables之后,以這種方式使用delta tracker對我來說似乎不太合適。

  • 如果記錄被刪除delta log指向一個新文件的可能性有多大,並且這個刪除的記錄將被讀取為一個新的記錄?

  • 如果記錄已更新delta log不指向新文件的機會有多大,並且不會考慮更新的記錄?

  • 如果在增量表上進行一些維護那么一些新文件被無處寫入的可能性有多大? 這可能會導致記錄被重新攝取

任何觀察或建議是否可以那樣工作都會很棒。 謝謝

在 Delta Lake 中,一切都在文件級別上工作。 所以沒有“就地”更新或刪除。 假設一條記錄被刪除(或更新),然后大致發生以下情況:

  1. 使用相關記錄讀入鑲木地板文件(+恰好在文件中的其他記錄)
  2. 將除已刪除記錄外的所有記錄寫出到新的 parquet 文件中
  3. 使用新版本更新事務日志,將舊的 parquet 文件標記為已刪除,將新的 parquet 文件標記為已添加。 請注意,在您運行VACUUM命令之前,舊的 parquet 文件不會被物理刪除。

更新過程基本相同。

更具體地回答您的問題:

如果記錄被刪除,delta 日志指向一個新文件的可能性有多大,並且這個刪除的記錄將被讀取為一個新記錄?

增量日志將指向一個新文件,但刪除的記錄不會在那里。 將有碰巧在原始文件中的所有其他記錄。

如果記錄被更新,delta log 不指向新文件並且不考慮更新記錄的可能性有多大?

文件未就地更新,因此不會發生這種情況。 寫入包含更新記錄的新文件(+ 原始文件中的任何其他記錄)。 事務日志更新為“指向”這個新文件。

如果在增量表上進行一些維護,那么一些新文件被無緣無故寫入的可能性有多大? 這可能會導致記錄被重新攝取

這是可能的,盡管不是“無中生有”。 例如,如果您運行OPTIMIZE現有的 parquet 文件,則會重新排列/組合以提高性能。 基本上這意味着將寫入許多新的 parquet 文件,並且事務日志中的新版本將指向這些 parquet 文件。 如果您在此之后獲取所有新文件,您將重新攝取數據。

一些注意事項:如果你的增量表是 append only 你可以使用結構化流來讀取它。 如果沒有,Databricks 會提供Change Data Feed ,為您提供記錄級別的插入、更新和刪除詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM