Cloud Storage CSV 檔案到 BigQuery 範本

「Cloud Storage CSV 檔案至 BigQuery」管道是一種批次管道,可讓您讀取儲存在 Cloud Storage 的 CSV 檔案中的資料,並將結果附加至 BigQuery 資料表。CSV 檔案可以解壓縮,也可以壓縮成 CompressionEnum SDK 頁面中列出的格式。

管道相關規定

如要使用這個範本,您的管道必須符合下列規定。

BigQuery 結構定義 JSON 檔案

建立說明 BigQuery 結構定義的 JSON 檔案。 確認結構定義含有標題為 BigQuery Schema 的頂層 JSON 陣列,且其中的內容遵循 {"name": "COLUMN_NAME", "type": "DATA_TYPE"} 這個格式。

Cloud Storage CSV 檔案至 BigQuery 批次範本不支援將資料匯入目標 BigQuery 資料表的 STRUCT (記錄) 欄位。

下列 JSON 說明 BigQuery 結構定義範例:

{
  "BigQuery Schema": [
    {
      "name": "location",
      "type": "STRING"
    },
    {
      "name": "name",
      "type": "STRING"
    },
    {
      "name": "age",
      "type": "STRING"
    },
    {
      "name": "color",
      "type": "STRING"
    },
    {
      "name": "coffee",
      "type": "STRING"
    }
  ]
}

錯誤的資料表結構定義

儲存 CSV 檔案中遭拒記錄的 BigQuery 資料表,必須與此處定義的資料表結構定義相符。

{
  "BigQuery Schema": [
    {
      "name": "RawContent",
      "type": "STRING"
    },
    {
      "name": "ErrorMsg",
      "type": "STRING"
    }
  ]
}

範本參數

必要參數

  • inputFilePattern:包含待處理文字的 CSV 檔案 Cloud Storage 路徑。例如:gs://your-bucket/path/*.csv。
  • schemaJSONPath:定義 BigQuery 結構定義的 JSON 檔案 Cloud Storage 路徑。
  • outputTable:儲存處理後資料的 BigQuery 資料表名稱。如果重複使用現有的 BigQuery 資料表,資料會附加至目的地資料表。
  • bigQueryLoadingTemporaryDirectory:在 BigQuery 載入程序期間使用的暫存目錄。例如:gs://your-bucket/your-files/temp_dir。
  • badRecordsOutputTable:處理 CSV 檔案時,用來儲存遭拒資料的 BigQuery 資料表名稱。如果重複使用現有的 BigQuery 資料表,資料會附加至目的地資料表。這個資料表的結構定義必須與錯誤資料表結構定義 (https://cloud.google.com/dataflow/docs/guides/templates/provided/cloud-storage-csv-to-bigquery#GcsCSVToBigQueryBadRecordsSchema) 相符。
  • delimiter:CSV 檔案使用的資料欄分隔符號。例如:,。
  • csvFormat:CSV 格式,請參閱 Apache Commons CSV 格式。預設值為 Default。

選用參數

  • containsHeaders:CSV 檔案中是否包含標頭。預設值為 false。
  • csvFileEncoding:CSV 檔案的字元編碼格式。允許的值為 US-ASCII、ISO-8859-1、UTF-8 和 UTF-16。預設值為 UTF-8。

執行範本

控制台

  1. 前往 Dataflow 的「Create job from template」(依據範本建立工作) 頁面。
  2. 前往「依範本建立工作」
  3. 在「Job name」(工作名稱) 欄位中,輸入專屬工作名稱。
  4. 選用:如要使用區域端點,請從下拉式選單中選取值。預設區域為 us-central1。

    如需可執行 Dataflow 工作的區域清單,請參閱「Dataflow 位置」。

  5. 從「Dataflow template」(Dataflow 範本) 下拉式選單中,選取「CSV files on Cloud Storage to BigQuery (Batch)」(將 Cloud Storage 中的 CSV 檔案遷移至 BigQuery (批次)) 範本。
  6. 在提供的參數欄位中輸入參數值。
  7. 按一下「Run Job」(執行工作)。

gcloud

在殼層或終端機中執行範本:

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates/VERSION/GCS_CSV_to_BigQuery \
    --region REGION_NAME \
    --parameters \
inputFilePattern=PATH_TO_CSV_DATA,\
schemaJSONPath=PATH_TO_BIGQUERY_SCHEMA_JSON,\
outputTable=BIGQUERY_DESTINATION_TABLE,\
badRecordsOutputTable=BIGQUERY_BAD_RECORDS_TABLE,\
csvFormat=CSV_FORMAT,\
delimiter=DELIMITER,\
bigQueryLoadingTemporaryDirectory=PATH_TO_TEMP_DIR_ON_GCS,\
containsHeaders=CONTAINS_HEADERS,\
csvFileEncoding=CSV_FILE_ENCODING

更改下列內容:

  • PROJECT_ID:您要執行 Dataflow 工作的 Google Cloud 專案 ID
  • JOB_NAME:您選擇的不重複工作名稱
  • VERSION:您要使用的範本版本

    您可以使用下列值:

    • latest,使用範本的最新版本,該版本位於 bucket 中非依日期命名的上層資料夾:gs://dataflow-templates/latest/
    • 版本名稱,例如 2023-09-12-00_RC00,可使用特定版本的範本,該範本會以巢狀結構存放在 bucket 中相應的依日期命名上層資料夾中:gs://dataflow-templates/
  • REGION_NAME:您要部署 Dataflow 工作的區域,例如 us-central1
  • PATH_TO_CSV_DATA:CSV 檔案的 Cloud Storage 路徑
  • PATH_TO_BIGQUERY_SCHEMA_JSON:包含結構定義的 JSON 檔案的 Cloud Storage 路徑
  • BIGQUERY_DESTINATION_TABLE:BigQuery 目的地資料表名稱
  • BIGQUERY_BAD_RECORDS_TABLE:BigQuery 錯誤記錄資料表名稱
  • PATH_TO_TEMP_DIR_ON_GCS:暫時目錄的 Cloud Storage 路徑
  • DELIMITER:CSV 檔案分隔符號
  • CSV_FORMAT:用於剖析記錄的 CSV 格式規格
  • CONTAINS_HEADERS:CSV 檔案是否包含標頭
  • CSV_FILE_ENCODING:CSV 檔案中的編碼

API

如要使用 REST API 執行範本,請傳送 HTTP POST 要求。如要進一步瞭解 API 和授權範圍,請參閱 projects.templates.launch。

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/templates:launch?gcsPath=gs://dataflow-templates/VERSION/GCS_CSV_to_BigQuery
{
   "jobName": "JOB_NAME",
   "parameters": {
       "inputFilePattern":"PATH_TO_CSV_DATA",
       "schemaJSONPath": "PATH_TO_BIGQUERY_SCHEMA_JSON",
       "outputTable":"BIGQUERY_DESTINATION_TABLE",
       "badRecordsOutputTable":"BIGQUERY_BAD_RECORDS_TABLE",
       "csvFormat":"CSV_FORMAT",
       "delimiter":"DELIMITER",
       "bigQueryLoadingTemporaryDirectory": "PATH_TO_TEMP_DIR_ON_GCS",
       "containsHeaders": "CONTAINS_HEADERS",
       "csvFileEncoding": "CSV_FILE_ENCODING"
   },
   "environment": { "zone": "us-central1-f" }
}

更改下列內容:

  • PROJECT_ID:您要執行 Dataflow 工作的 Google Cloud 專案 ID
  • JOB_NAME:您選擇的不重複工作名稱
  • VERSION:您要使用的範本版本

    您可以使用下列值:

    • latest,使用範本的最新版本,該版本位於 bucket 中非依日期命名的上層資料夾:gs://dataflow-templates/latest/
    • 版本名稱,例如 2023-09-12-00_RC00,可使用特定版本的範本,該範本會以巢狀結構存放在 bucket 中相應的依日期命名上層資料夾中:gs://dataflow-templates/
  • LOCATION:您要部署 Dataflow 工作的區域,例如 us-central1
  • PATH_TO_CSV_DATA:CSV 檔案的 Cloud Storage 路徑
  • PATH_TO_BIGQUERY_SCHEMA_JSON:包含結構定義的 JSON 檔案的 Cloud Storage 路徑
  • BIGQUERY_DESTINATION_TABLE:BigQuery 目的地資料表名稱
  • BIGQUERY_BAD_RECORDS_TABLE:BigQuery 錯誤記錄資料表名稱
  • PATH_TO_TEMP_DIR_ON_GCS:暫時目錄的 Cloud Storage 路徑
  • DELIMITER:CSV 檔案分隔符號
  • CSV_FORMAT:用於剖析記錄的 CSV 格式規格
  • CONTAINS_HEADERS:CSV 檔案是否包含標頭
  • CSV_FILE_ENCODING:CSV 檔案中的編碼

後續步驟