Cloud Storage Text 到 BigQuery 範本

「Cloud Storage Text 到 BigQuery」管道是一個批次管道,可讀取儲存在 Cloud Storage 的文字檔案,並使用 JavaScript 使用者定義函式 (UDF) 轉換文字檔案,然後將結果附加至 BigQuery 資料表。

管道相關規定

  • 建立一個用來描述您 BigQuery 結構定義的 JSON 檔案。

    確保有一個標題為 BigQuery Schema 的最高層級 JSON 陣列,且其中的內容遵循 {"name": "COLUMN_NAME", "type": "DATA_TYPE"} 這個格式。

    Cloud Storage 文字到 BigQuery 批次範本不支援將資料匯入目標 BigQuery 資料表的 STRUCT (記錄) 欄位。

    下列 JSON 描述 BigQuery 結構定義範例:

    {
      "BigQuery Schema": [
        {
          "name": "name",
          "type": "STRING"
        },
        {
          "name": "age",
          "type": "INTEGER"
        },
      ]
    }
  • 建立一個 JavaScript (.js) 檔案,其中包含提供文字行轉換邏輯的 UDF 函式。函式必須傳回 JSON 字串。

    舉例來說,這個函式會將 CSV 檔案中的每一行都拆開,將值轉換之後再傳回 JSON 字串。

    function process(inJson) {
      val = inJson.split(",");
    
      const obj = { "name": val[0], "age": parseInt(val[1]) };
      return JSON.stringify(obj);
    }

範本參數

必要參數

  • inputFilePattern:Cloud Storage 中您要處理的文字的 gs:// 路徑,例如:gs://your-bucket/your-file.txt
  • JSONPath:JSON 檔案 (用來描述您儲存在 Cloud Storage 中 BigQuery 的結構定義) 的 gs:// 路徑,例如:gs://your-bucket/your-schema.json
  • outputTable:用來儲存已處理資料的 BigQuery 資料表位置。如果重複使用現有資料表,系統會覆寫該資料表。例如:<PROJECT_ID>:<DATASET_NAME>.<TABLE_NAME>
  • javascriptTextTransformGcsPath:定義要使用的 JavaScript 使用者定義函式 (UDF) 的 .js 檔案 Cloud Storage URI。例如:gs://your-bucket/your-transforms/*.js
  • javascriptTextTransformFunctionName:您要使用的 JavaScript 使用者定義函式 (UDF) 名稱。舉例來說,如果您的 JavaScript 函式程式碼是 myTransform(inJson) { /*...do stuff...*/ },則函式名稱就是 myTransform。如需 JavaScript UDF 範例,請參閱 UDF 範例 (https://github.com/GoogleCloudPlatform/DataflowTemplates#udf-examples)。例如:transform_udf1
  • bigQueryLoadingTemporaryDirectory:BigQuery 載入程序的暫存目錄。例如:gs://your-bucket/your-files/temp-dir

選用參數

使用者定義函式

您可以視需要撰寫使用者定義函式 (UDF) 來擴充這個範本。範本會針對每個輸入元素呼叫 UDF。元素酬載會序列化為 JSON 字串。詳情請參閱「為 Dataflow 範本建立使用者定義函式」。

函式規格

UDF 的規格如下:

  • 輸入:Cloud Storage 輸入檔案中的一行文字。
  • 輸出:符合 BigQuery 目的地資料表結構定義的 JSON 字串。

執行範本

控制台

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

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

  5. 從「Dataflow template」(Dataflow 範本) 下拉式選單中選取 the Text Files on Cloud Storage to BigQuery (Batch) template。
  6. 在提供的參數欄位中輸入參數值。
  7. 按一下「Run Job」(執行工作)

gcloud

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

gcloud dataflow flex-template run JOB_NAME \
    --template-file-gcs-location gs://dataflow-templates-REGION_NAME/VERSION/flex/GCS_Text_to_BigQuery_Flex \
    --region REGION_NAME \
    --parameters \
javascriptTextTransformFunctionName=JAVASCRIPT_FUNCTION,\
JSONPath=PATH_TO_BIGQUERY_SCHEMA_JSON,\
javascriptTextTransformGcsPath=PATH_TO_JAVASCRIPT_UDF_FILE,\
inputFilePattern=PATH_TO_TEXT_DATA,\
outputTable=BIGQUERY_TABLE,\
bigQueryLoadingTemporaryDirectory=PATH_TO_TEMP_DIR_ON_GCS

更改下列內容:

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

    您可以使用下列值:

  • REGION_NAME: 您要部署 Dataflow 工作的地區,例如 us-central1
  • JAVASCRIPT_FUNCTION: 您要使用的 JavaScript 使用者定義函式 (UDF) 名稱

    舉例來說,如果您的 JavaScript 函式程式碼是 myTransform(inJson) { /*...do stuff...*/ },則函式名稱就是 myTransform。如需 JavaScript UDF 範例,請參閱「UDF 範例」。

  • PATH_TO_BIGQUERY_SCHEMA_JSON:指向 JSON 檔案 (內含結構定義) 的 Cloud Storage 路徑
  • PATH_TO_JAVASCRIPT_UDF_FILE: 定義要使用的 JavaScript 使用者定義函式 (UDF) 的 .js 檔案 Cloud Storage URI,例如 gs://my-bucket/my-udfs/my_file.js
  • PATH_TO_TEXT_DATA:文字資料集的 Cloud Storage 路徑
  • BIGQUERY_TABLE:BigQuery 資料表名稱
  • PATH_TO_TEMP_DIR_ON_GCS:Cloud Storage 中暫時目錄的路徑

API

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

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch
{
   "launch_parameter": {
      "jobName": "JOB_NAME",
      "parameters": {
        "javascriptTextTransformFunctionName": "JAVASCRIPT_FUNCTION",
        "JSONPath": "PATH_TO_BIGQUERY_SCHEMA_JSON",
        "javascriptTextTransformGcsPath": "PATH_TO_JAVASCRIPT_UDF_FILE",
        "inputFilePattern":"PATH_TO_TEXT_DATA",
        "outputTable":"BIGQUERY_TABLE",
        "bigQueryLoadingTemporaryDirectory": "PATH_TO_TEMP_DIR_ON_GCS"
      },
      "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/GCS_Text_to_BigQuery_Flex",
   }
}

更改下列內容:

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

    您可以使用下列值:

  • LOCATION: 您要部署 Dataflow 工作的地區,例如 us-central1
  • JAVASCRIPT_FUNCTION: 您要使用的 JavaScript 使用者定義函式 (UDF) 名稱

    舉例來說,如果您的 JavaScript 函式程式碼是 myTransform(inJson) { /*...do stuff...*/ },則函式名稱就是 myTransform。如需 JavaScript UDF 範例,請參閱「UDF 範例」。

  • PATH_TO_BIGQUERY_SCHEMA_JSON:指向 JSON 檔案 (內含結構定義) 的 Cloud Storage 路徑
  • PATH_TO_JAVASCRIPT_UDF_FILE: 定義要使用的 JavaScript 使用者定義函式 (UDF) 的 .js 檔案 Cloud Storage URI,例如 gs://my-bucket/my-udfs/my_file.js
  • PATH_TO_TEXT_DATA:文字資料集的 Cloud Storage 路徑
  • BIGQUERY_TABLE:BigQuery 資料表名稱
  • PATH_TO_TEMP_DIR_ON_GCS:Cloud Storage 中暫時目錄的路徑

後續步驟