基本上,我們希望基於特定列的值(而不是日期)將大型(數十億行)bigquery表拆分爲大量(可能大約爲100k)較小的表。我無法弄清楚如何在bigquery中有效地執行它,所以我正在考慮使用數據流。使用數據流,我們可以先加載數據,然後爲每條記錄創建一個鍵值對,關鍵是我們想要拆分表的特定列的所有可能值,然後我們可以通過將記錄組合鑰匙。所以在這個操作之後,我們有(密鑰,[記錄])的PCollection。那麼我們需要將PCollection寫回到bigquery表中,表名可以是key_table。數據流中的動態bigquery表名
所以操作將是:p | beam.io.Read(beam.io.BigQuerySource())| beam.map(lambda記錄:(record ['splitcol'],record))| beam.GroupByKey()| beam.io.Write(beam.io.BigQuerySink)
現在的關鍵問題是如何根據PCollection中每個元素的值在最後一步寫入不同的表。
這個問題是以某種方式與另一個問題相關: Writing different values to different BigQuery tables in Apache Beam。但我是一個Python的傢伙,不知道在Python SDK中是否也可能有相同的解決方案。
很棒的信息。感謝您的建議 –