透過 BigQuery 適用的 Dataflow 受管理 I/O,您可以在串流和批次管道中轉換及充實資料。這項服務會將 BigQuery 整合為 Dataflow 工作的來源和目的地,簡化 BigQuery API 互動。您可以在 BigQuery 中動態建立資料表和目的地,處理各種用途的大型資料集,從即時分析到資料倉儲皆可。
代管 I/O 的優點
代管 I/O 可為 BigQuery 提供下列優點和功能:
- 建立動態資料表
- 動態目的地
- 讀取資料時,連接器會使用 BigQuery Storage Read API。
寫入時,連接器會使用下列 BigQuery 方法:
- 如果來源是無界限,且 Dataflow 使用串流處理機制,確保每筆資料只處理一次,連接器會使用BigQuery Storage Write API 寫入 BigQuery,並確保每筆資料只傳送一次。
- 如果來源是無界限,且 Dataflow 使用串流至少一次處理,連接器會使用BigQuery Storage Write API 執行寫入 BigQuery 作業,並採用至少一次傳送語意。
- 如果來源有界限,連接器會使用 BigQuery 檔案載入。
需求條件
下列 SDK 支援 BigQuery 的代管 I/O:
- Java 適用的 Apache Beam SDK 2.61.0 以上版本
- Python 適用的 Apache Beam SDK 2.61.0 以上版本
設定
BigQuery 的代管 I/O 支援下列設定參數:
BIGQUERY 閱讀
| 設定 | 類型 | 說明 |
|---|---|---|
| kms_key |
str
|
使用這個 Cloud KMS 金鑰加密資料 |
| query |
str
|
要執行的 SQL 查詢,用於從 BigQuery 資料表讀取資料。 |
| row_restriction |
str
|
僅讀取符合此篩選條件的資料列,篩選條件必須與 Google 標準 SQL 相容。透過查詢讀取時不支援這項功能。 |
| 欄位 |
list[str]
|
只從 BigQuery 資料表讀取指定欄位 (資料欄)。系統傳回的欄位可能不會按照指定順序排列。如未指定值,系統會傳回所有欄位。例如:「col1, col2, col3」 |
| 表格 |
str
|
要從中讀取資料的 BigQuery 資料表完整名稱。格式:[${PROJECT}:]${DATASET}.${TABLE} |
BIGQUERY 撰寫
| 設定 | 類型 | 說明 |
|---|---|---|
| table |
str
|
要寫入的 BigQuery 資料表。格式:[${PROJECT}:]${DATASET}.${TABLE} |
| drop |
list[str]
|
寫入前要從輸入記錄捨棄的欄位名稱清單,與「keep」和「only」互斥。 |
| 保留 |
list[str]
|
要保留於輸入記錄的欄位名稱清單。寫入之前,其他欄位都會捨棄。與「drop」和「only」互斥。 |
| kms_key |
str
|
使用這個 Cloud KMS 金鑰加密資料 |
| 僅限 |
str
|
要寫入的單一記錄欄位名稱,與「keep」和「drop」互斥。 |
| triggering_frequency_seconds |
int64
|
決定將進度「提交」至 BigQuery 的頻率。預設值為每 5 秒一次。 |
後續步驟
如需詳細資訊和程式碼範例,請參閱下列主題: