簡體   English   中英

用於數據屏蔽/標記化的數據流流模板給出不一致的結果

[英]Dataflow streaming template for data masking/tokenization giving inconsistent results

Google 提供的 Dataflow Streaming 模板用於使用雲 DLP 從雲存儲到 bigquery 的數據屏蔽/標記化為每個源文件提供不一致的 output。

我們在 GCS 存儲桶中有 100 個奇怪的文件,每個文件有 100 萬條記錄,我們正在調用數據流流模板以使用 DLP 標記數據並加載到 BigQuery 中。

在按順序加載文件時,我們看到結果不一致

對於少數文件,完整的 1M 被加載,但對於大多數文件,行在 0.98M 到 0.99M 之間變化。 這種行為有什么理由嗎?

我不確定,但這可能是由於用於將數據流式傳輸到BigQueryBigQuery best-effort deduplication mechanism

來自Beam文檔:

注意:默認情況下,流式插入會啟用 BigQuery 盡力去重機制。 您可以通過設置 ignoreInsertIds 來禁用它。 啟用和禁用重復數據刪除時的配額限制不同:

流式插入為每個表目標應用默認分片。 您可以使用 withAutoSharding(從 2.28.0 版本開始)啟用動態分片,並且分片的數量可以在運行時確定和更改。 分片行為取決於跑步者。

來自谷歌雲文檔:

盡力而為重復數據刪除當您為插入的行提供 insertId 時,BigQuery 使用此 ID 來支持最多一分鍾的盡力而為重復數據刪除。 也就是說,如果您在該時間段內多次將具有相同 insertId 的同一行 stream 插入到同一個表中,BigQuery 可能會對該行的多次出現進行去重,僅保留其中一次出現。

系統期望提供有相同 insertIds 的行也是相同的。 如果兩行具有相同的 insertId,則 BigQuery 保留哪一行是不確定的。

重復數據刪除通常用於分布式系統中的重試場景,在這種情況下,在某些錯誤情況下無法確定流式插入的 state,例如系統與 BigQuery 之間的網絡錯誤或 BigQuery 內部錯誤。 如果您重試插入,請對同一組行使用相同的 insertId,以便 BigQuery 可以嘗試刪除重復數據。 有關詳細信息,請參閱對流式插入進行故障排除。

BigQuery 提供的重復數據刪除是盡力而為,不應依賴它作為保證數據中不存在重復項的機制。 此外,BigQuery 可能會隨時降低最大努力重復數據刪除的質量,以保證您的數據具有更高的可靠性和可用性。

如果您對數據有嚴格的重復數據刪除要求,Google Cloud Datastore 是一種支持事務的替代服務。

可以使用ignoreInsertIds禁用此機制

您可以通過禁用此機制進行測試並檢查是否插入了所有行。

通過調整模板中批量大小的值,所有 1M 記錄的文件都成功加載

暫無
暫無

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

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