從 Cloud Storage 載入 JSON 資料

從 Cloud Storage 載入 JSON 檔案

從 Cloud Storage 載入以換行符號分隔的 JSON 資料時,您可以將資料載入至新的資料表/分區,或將資料附加到現有資料表/分區,或覆寫現有資料表/分區。資料載入至 BigQuery 後,會轉換為 Capacitor 列表型格式 (BigQuery 的儲存格式)。

將資料從 Cloud Storage 載入至 BigQuery 資料表時,包含該資料表的資料集必須位於與 Cloud Storage 值區相同的地區或多地區位置。

以換行符號分隔的 JSON 格式與 JSON Lines 格式相同。

如要進一步瞭解如何載入本機檔案中的 JSON 資料,請參閱在 BigQuery 中載入本機資料來源中的資料一文。

限制

將 JSON 資料從 Cloud Storage 載入至 BigQuery 時,請注意以下幾點:

  • JSON 資料必須以換行符號分隔。在檔案中各 JSON 物件必須獨立成行。
  • 如果您使用 gzip 壓縮,BigQuery 無法同時讀取資料。將壓縮的 JSON 資料載入至 BigQuery 會比載入未壓縮的資料還慢。
  • 您無法在同一個載入工作中同時包含壓縮和未壓縮的檔案。
  • BigQuery 不支援 JSON 對應或字典。例如,"product_categories": {"my_product": 40.0} 無效,但 "product_categories": {"column1": "my_product" , "column2": 40.0} 有效。
  • 載入 CSV 或 JSON 資料時,DATE 欄中的值必須使用連字號 (-) 分隔符,且必須採用下列日期格式:YYYY-MM-DD (年-月-日)。
  • 載入 JSON 或 CSV 資料時,TIMESTAMP 欄中的值必須使用連字號 (-) 分隔符來區隔時間戳記的日期部分,且必須採用下列日期格式:YYYY-MM-DD (年-月-日)。時間戳記的 hh:mm:ss (時-分-秒) 部分必須使用冒號 (:) 分隔符。

所需權限

將資料載入 BigQuery 時,您必須具備相關權限,以便執行載入工作以及將資料載入新的或現有的 BigQuery 資料表和分區。如要載入 Cloud Storage 中的資料,您也要有權限存取包含資料的值區。

BigQuery 權限

您至少要具備下列權限,才能將資料載入 BigQuery。不管您是要將資料載入至新的資料表或分區,還是要將資料附加到資料表/分區或覆寫資料表/分區,都需要這些權限。

  • bigquery.tables.create
  • bigquery.tables.updateData
  • bigquery.jobs.create

以下是具有 bigquery.tables.createbigquery.tables.updateData 權限的預先定義 Cloud IAM 角色:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

以下是具有 bigquery.jobs.create 權限的預先定義 Cloud IAM 角色:

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

此外,具備 bigquery.datasets.create 權限的使用者在建立資料集時,會獲得 bigquery.dataOwner 存取權。 bigquery.dataOwner 存取權可讓使用者透過載入工作建立及更新資料集中的資料表。

如要進一步瞭解 BigQuery 中的 Cloud IAM 角色和權限,請參閱存取權控管

Cloud Storage 權限

您必須具備 storage.objects.get 權限,才能從 Cloud Storage 值區載入資料。如要使用 URI 萬用字元,您還必須具備 storage.objects.list 權限。

只要授予預先定義的 Cloud IAM 角色 storage.objectViewer,即可提供 storage.objects.getstorage.objects.list 權限。

將 JSON 資料載入至新的資料表

您可以透過以下方式,將以換行符號分隔的 JSON 資料從 Cloud Storage 載入至新的 BigQuery 資料表:

  • 使用 GCP Console 或傳統網頁版 UI
  • 使用 CLI 的 bq load 指令
  • 呼叫 jobs.insert API 方法並設定 load 工作
  • 使用用戶端程式庫

如要將 JSON 資料從 Cloud Storage 載入至新的 BigQuery 資料表:

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 在導覽面板的「Resources」(資源) 區段,展開您的專案並選取資料集。

  3. 在視窗右側的「details」(詳細資料) 面板中,按一下 [Create table] (建立資料表)。載入資料的程序與建立空白資料表的程序相同。

    建立資料表

  4. 在「Create table」(建立資料表) 頁面的「Source」(來源) 區段中:

    • 在「Create table from」(使用下列資料建立資料表) 中,選取 [Cloud Storage]。

    • 在「Source」(來源) 欄位中,瀏覽檔案或輸入 Cloud Storage URI。請注意,您無法在 GCP Console 中輸入多個 URI,但可以使用萬用字元。Cloud Storage 值區的位置必須與您要建立的資料表所在的資料集位置相同。

      選取檔案

    • 在「File format」(檔案格式) 選取 [JSON (Newline Delimited)] (JSON (以換行符號分隔))

  5. 在「Create table」(建立資料表) 頁面的「Destination」(目的地) 區段中:

    • 在「Dataset name」(資料集名稱) 部分選擇適當的資料集。

      查看資料集

    • 確認「Table type」(資料表類型) 已設為「Native table」(原生資料表)

    • 在「Table name」(資料表名稱) 欄位中,輸入您在 BigQuery 中建立資料表時使用的資料表名稱。

  6. 在「Schema」(結構定義) 區段的「Auto-detect」(自動偵測) 底下,勾選 [Schema and input parameters] (結構定義和輸入參數) 核取方塊,以啟用結構定義自動偵測功能。或者,您可以透過以下方式手動輸入結構定義

    • 啟用 [Edit as text] (以文字形式編輯),然後以 JSON 陣列的形式輸入資料表結構定義。

      以 JSON 陣列新增結構定義

    • 按一下 [Add Field] (新增欄位) 並手動輸入結構定義。

      使用 [Add Field] (新增欄位) 按鈕加入結構定義

  7. (選用) 如要對資料表進行分區,請在「Partition and cluster settings」(分區與叢集設定) 區段中選擇您要使用的選項:

    • 如要建立分區資料表,請按一下 [No partitioning] (無分區),選取 [Partition by field] (依欄位分區),然後選擇 DATETIMESTAMP 欄。如果您的結構定義未包含 DATETIMESTAMP 欄,這個選項就無法使用。
    • 如要建立擷取時間分區資料表,請按一下 [No partitioning] (無分區),然後選取 [Partition by ingestion time] (依擷取時間分區)
  8. (選用) 在「Partitioning filter」(分區篩選器) 區段中,勾選 [Require partition filter] (需要分區篩選器) 方塊,要求使用者提供 WHERE 子句來指定要查詢的分區。使用分區篩選器可以降低成本並改善效能。詳情請參閱查詢分區資料表。如果選取了 [No partitioning] (無分區),這個選項就無法使用。

  9. (選用) 如要幫資料表分群,請在「Clustering order」(分群順序) 方塊中,輸入一到四個欄位名稱。目前分群法僅支援分區資料表。

  10. (選用) 按一下 [Advanced options] (進階選項)

    • 針對 [Write preference] (寫入偏好設定),請將 [Write if empty] (空白時寫入) 保持為已選取狀態。這個選項能建立新的資料表並將您的資料載入其中。
    • 針對「Number of errors allowed」(允許的錯誤數量) 欄位,請接受預設值 0,或輸入可忽略的含錯列數上限。如果含錯的列數超過這個值,該項工作就會導致 invalid 訊息並失敗。
    • 「Unknown values」(不明的值) 部分請勾選 [Ignore unknown values] (略過不明的值),這樣一來,當資料列不在資料表的結構定義中,系統就會忽略該資料列中的值。
    • 針對「Encryption」(加密),請按一下 [Customer-managed key] (客戶管理的金鑰),以使用 Cloud Key Management Service 金鑰。如果您保留「Google-managed key」(Google 代管的金鑰) 這項設定,則 BigQuery 會加密靜態資料
  11. 按一下 [Create table] (建立資料表)。

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。
    前往 BigQuery 網頁版 UI

  2. 在導覽面板中,將游標懸停在某個資料集上,按一下向下箭頭圖示 向下箭號圖示圖片,然後點選 [Create new table] (建立新資料表)。載入資料的程序與建立空白資料表的程序相同。

  3. 在「Create Table」(建立資料表) 頁面的「Source Data」(來源資料) 區段中:

    • 按一下 [Create from source] (透過來源建立)
    • 在「Location」(位置) 中,選取 [Cloud Storage],然後在「Source」(來源) 欄位輸入 Cloud Storage URI。請注意,您無法在 BigQuery 網頁版 UI 中輸入多個 URI,但可以使用萬用字元。Cloud Storage 值區的位置必須與要建立的資料表所在的資料集位置相同。
    • 在「File format」(檔案格式) 選取 [JSON (Newline Delimited)] (JSON (以換行符號分隔))
  4. 在「Destination Table」(目的地資料表) 區段中:

    • 在「Table name」(資料表名稱) 部分選擇適當的資料集,並在資料表名稱欄位中,輸入要在 BigQuery 中建立的資料表名稱。
    • 確認「Table type」(資料表類型) 已設為「Native table」(原生資料表)
  5. 在「Schema」(結構定義) 區段的「Auto-detect」(自動偵測) 底下,勾選 [Schema and input parameters] (結構定義和輸入參數) 核取方塊,以啟用結構定義自動偵測功能。或者,您可以透過以下方式手動輸入結構定義

    • 按一下 [Edit as text] (以文字形式編輯),然後以 JSON 陣列的形式輸入資料表結構定義:

      以 JSON 陣列新增結構定義

    • 按一下 [Add Field] (新增欄位) 並手動輸入結構定義。

      使用新增欄位功能來新增結構定義

  6. (選用) 在「Options」(選項) 區段中:

    • 針對「Number of errors allowed」(允許的錯誤數量) 欄位,請接受預設值 0,或輸入可忽略的含錯列數上限。如果含錯的列數超過這個值,該項工作就會導致 invalid 訊息並失敗。
    • 針對 [Write preference] (寫入偏好設定),請將 [Write if empty] (空白時寫入) 保持為已選取狀態。這個選項能建立新的資料表並將您的資料載入其中。
    • 如要將資料表分區:
      • 針對「Partitioning Type」(分區類型),按一下 [None] (無),接著選擇 [Day] (日)
      • 在「Partitioning Field」(分區欄位) 中
      • 如要建立分區資料表,請選擇 DATETIMESTAMP 欄。如果您的結構定義未包含 DATETIMESTAMP 欄,這個選項就無法使用。
      • 如要建立擷取時間分區資料表,請保留預設值:_PARTITIONTIME
      • 勾選 [Require partition filter] (需要分區篩選器) 方塊,要求使用者提供 WHERE 子句來指定要查詢的分區。使用分區篩選器可以降低成本並改善效能。詳情請參閱查詢分區資料表。如果 [Partitioning type] (分區類型) 設為 [None] (無),這個選項就無法使用。
    • 如要幫資料表分群,請在「Clustering fields」(分群欄位) 方塊中,輸入一到四個欄位名稱。
    • 針對「Destination encryption」(目的地加密),請按一下 [Customer-managed encryption] (客戶管理的加密),以使用 Cloud Key Management Service 金鑰來加密資料表。如果您保留 Default 設定,BigQuery 會使用 Google 代管的金鑰來加密靜態資料
  7. 按一下 [Create Table] (建立資料表)

CLI

使用 bq load 指令,接著使用 --source_format 標記指定 NEWLINE_DELIMITED_JSON,然後加入 Cloud Storage URI。您可以加入單一 URI、逗號分隔的 URI 清單或包含萬用字元的 URI。在結構定義檔中以內嵌方式提供結構定義,或使用結構定義自動偵測功能。

(選用) 提供 --location 標記,並將值設為您的位置

其他選用標記包括:

  • --max_bad_records:這是一個整數,用來指定整個工作失敗前可允許的錯誤記錄數量上限。預設值為 0。無論 --max_bad_records 的值為何,系統最多只會傳回五個任何類型的錯誤。
  • --ignore_unknown_values:如果指定了這個標記,CSV 或 JSON 資料中就可以含有其他無法辨識的值 (但系統會予以忽略)。
  • --autodetect:如果指定了這個標記,系統會針對 CSV 和 JSON 資料啟用結構定義自動偵測功能。
  • --quote:用來括住記錄的引號字元。預設值為 "。如要指示沒有引號字元,請使用空白字串。
  • --time_partitioning_type:針對資料表啟用時間分區並設定分區類型。目前唯一可使用的值為 DAY,亦即每天產生一個分區。如果您依據 DATETIMESTAMP 欄建立分區資料表,則不一定要使用這個標記。
  • --time_partitioning_expiration:這是一個整數,用來指定系統應在經過多少時間後刪除時間分區 (以秒為單位)。到期時間為分區的世界標準時間日期加上整數值。
  • --time_partitioning_field:用於建立分區資料表DATETIMESTAMP 欄。如果啟用時間分區時未提供這個值,系統就會建立擷取時間分區資料表
  • --require_partition_filter:如果啟用這個選項,則使用者必須提供 WHERE 子句以指定要查詢的分區。使用分區篩選器可以降低成本並改善效能。詳情請參閱查詢分區資料表
  • --clustering_fields:以逗號分隔的資料欄名稱清單 (最多四個名稱),用來建立叢集資料表。這個標記只能與分區資料表搭配使用。
  • --destination_kms_key:用來加密資料表資料的 Cloud KMS 金鑰。

    如需分區資料表的詳細資訊,請參閱以下說明文章:

    如需叢集資料表的詳細資訊,請參閱以下說明文章:

    如需資料表加密的詳細資訊,請參閱以下說明文章:

如要將 JSON 資料載入 BigQuery,請輸入下列指令:

bq --location=location load \
--source_format=format \
dataset.table \
path_to_source \
schema

其中:

  • 「location」是您的位置,--location 是選用標記。舉例來說,假設您是在東京地區使用 BigQuery,可將標記的值設為 asia-northeast1。您可以使用 .bigqueryrc 檔案設定位置的預設值。
  • 「format」NEWLINE_DELIMITED_JSON
  • 「dataset」是現有資料集。
  • 「table」是您要載入資料的目標資料表的名稱。
  • 「path_to_source」是完整的 Cloud Storage URI,或是以逗號分隔的 URI 清單。您也可以使用萬用字元
  • 「schema」是有效的結構定義。結構定義可以是本機 JSON 檔案,或以內嵌的方式在指令中輸入。您也可以改用 --autodetect 標記而不提供結構定義。

示例:

下列指令會將 gs://mybucket/mydata.json 中的資料載入至 mydataset 中名為 mytable 的資料表。結構定義則是在名稱為 myschema.json 的本機結構定義檔中指定。

    bq load \
    --source_format=NEWLINE_DELIMITED_JSON \
    mydataset.mytable \
    gs://mybucket/mydata.json \
    ./myschema.json

下列指令會將 gs://mybucket/mydata.json 中的資料載入至 mydataset 中名為 mytable 的擷取時間分區資料表。結構定義則是在名稱為 myschema.json 的本機結構定義檔中指定。

    bq load \
    --source_format=NEWLINE_DELIMITED_JSON \
    --time_partitioning_type=DAY \
    mydataset.mytable \
    gs://mybucket/mydata.json \
    ./myschema.json

下列指令會將 gs://mybucket/mydata.json 中的資料載入至 mydataset 中名為 mytable 的分區資料表。資料表會依 mytimestamp 欄進行分區。結構定義則是在名稱為 myschema.json 的本機結構定義檔中指定。

    bq load \
    --source_format=NEWLINE_DELIMITED_JSON \
    --time_partitioning_field mytimestamp \
    mydataset.mytable \
    gs://mybucket/mydata.json \
    ./myschema.json

下列指令會將 gs://mybucket/mydata.json 中的資料載入至 mydataset 中名為 mytable 的資料表。結構定義是由系統自動偵測。

    bq load \
    --autodetect \
    --source_format=NEWLINE_DELIMITED_JSON \
    mydataset.mytable \
    gs://mybucket/mydata.json

下列指令會將 gs://mybucket/mydata.json 中的資料載入至 mydataset 中名為 mytable 的資料表。結構定義是以內嵌的方式定義,格式為 field:data_type, field:data_type

    bq load \
    --source_format=NEWLINE_DELIMITED_JSON \
    mydataset.mytable \
    gs://mybucket/mydata.json \
    qtr:STRING,sales:FLOAT,year:STRING

下列指令會將 gs://mybucket/ 中多個檔案的資料載入至 mydataset 中名為 mytable 的資料表。Cloud Storage URI 使用萬用字元。結構定義是由系統自動偵測。

    bq load \
    --autodetect \
    --source_format=NEWLINE_DELIMITED_JSON \
    mydataset.mytable \
    gs://mybucket/mydata*.json

下列指令會將 gs://mybucket/ 中多個檔案的資料載入至 mydataset 中名為 mytable 的資料表。指令包含以逗號分隔且帶有萬用字元的 Cloud Storage URI 清單。結構定義則是在名稱為 myschema.json 的本機結構定義檔中指定。

    bq load \
    --source_format=NEWLINE_DELIMITED_JSON \
    mydataset.mytable \
    "gs://mybucket/00/*.json","gs://mybucket/01/*.json" \
    ./myschema.json

API

  1. 建立指向 Cloud Storage 中來源資料的 load 工作。

  2. (選用) 在工作資源jobReference 區段中,於 location 屬性指定您的位置

  3. source URIs 屬性必須完整且符合下列格式:gs://bucket/object。每個 URI 可包含一個「*」萬用字元

  4. sourceFormat 屬性設為 NEWLINE_DELIMITED_JSON,以指定 JSON 資料格式。

  5. 如要檢查工作狀態,請呼叫 jobs.get(job_id*),其中「job_id」是初始要求傳回的工作 ID。

    • 如果顯示 status.state = DONE,表示工作已順利完成。
    • 如果顯示 status.errorResult 屬性,表示要求失敗,且該物件會包含描述問題的資訊。如果要求失敗,則不會建立任何資料表,也不會載入任何資料。
    • 未顯示 status.errorResult 表示工作順利完成,但可能有一些不嚴重的錯誤,例如匯入某些資料列時發生問題。不嚴重的錯誤將列在傳回的工作物件的 status.errors 屬性中。

API 附註:

  • 載入工作是整體一致的,載入工作失敗,則所有資料都無法使用;反之,如果成功,則所有資料都可以使用。

  • 最佳做法是產生唯一識別碼,並在呼叫 jobReference.jobId 以建立載入工作時,將該識別碼當做 jobs.insert 傳送。此方法較不受網路故障問題的影響,這是因為用戶端可對已知的工作 ID 進行輪詢或重試。

  • 對指定的工作 ID 呼叫 jobs.insert 是一種冪等運算。也就是說,您可以對同一個工作 ID 重試無數次,最多會有一個作業成功。

C#

在試用這個範例程式之前,請至 BigQuery 快速入門導覽課程:使用用戶端程式庫,按照 C# 設定說明進行操作。詳情請參閱 BigQuery C# API 參考說明文件

請使用 BigQueryClient..CreateLoadJob() 方法,從 Cloud Storage 啟動載入工作。如要使用以換行符號分隔的 JSON,請建立 CreateLoadJobOptions 物件,並將 SourceFormat 屬性設為 FileFormat.NewlineDelimitedJson


using Google.Apis.Bigquery.v2.Data;
using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryLoadTableGcsJson
{
    public void LoadTableGcsJson(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        var gcsURI = "gs://cloud-samples-data/bigquery/us-states/us-states.json";
        var dataset = client.GetDataset(datasetId);
        var schema = new TableSchemaBuilder {
            { "name", BigQueryDbType.String },
            { "post_abbr", BigQueryDbType.String }
        }.Build();
        TableReference destinationTableRef = dataset.GetTableReference(
            tableId: "us_states");
        // Create job configuration
        var jobOptions = new CreateLoadJobOptions()
        {
            SourceFormat = FileFormat.NewlineDelimitedJson
        };
        // Create and run job
        BigQueryJob loadJob = client.CreateLoadJob(
            sourceUri: gcsURI, destination: destinationTableRef,
            schema: schema, options: jobOptions);
        loadJob.PollUntilCompleted();  // Waits for the job to complete.
        // Display the number of rows uploaded
        BigQueryTable table = client.GetTable(destinationTableRef);
        Console.WriteLine(
            $"Loaded {table.Resource.NumRows} rows to {table.FullyQualifiedId}");
    }
}

Go

在試行此示例之前,請至 BigQuery 快速入門導覽課程:使用用戶端程式庫,按照 Go 設定說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/us-states/us-states.json")
gcsRef.SourceFormat = bigquery.JSON
gcsRef.Schema = bigquery.Schema{
	{Name: "name", Type: bigquery.StringFieldType},
	{Name: "post_abbr", Type: bigquery.StringFieldType},
}
loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)
loader.WriteDisposition = bigquery.WriteEmpty

job, err := loader.Run(ctx)
if err != nil {
	return err
}
status, err := job.Wait(ctx)
if err != nil {
	return err
}

if status.Err() != nil {
	return fmt.Errorf("Job completed with error: %v", status.Err())
}

Java

在試行此示例之前,請至 BigQuery 快速入門導覽課程:使用用戶端程式庫,按照 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件

使用 LoadJobConfiguration.builder(tableId, sourceUri) 方法,從 Cloud Storage 啟動載入工作。如要使用以換行符號分隔的 JSON,請使用 LoadJobConfiguration.setFormatOptions(FormatOptions.json())

String sourceUri = "gs://cloud-samples-data/bigquery/us-states/us-states.json";
TableId tableId = TableId.of(datasetName, tableName);
// Table field definition
Field[] fields =
    new Field[] {
      Field.of("name", LegacySQLTypeName.STRING),
      Field.of("post_abbr", LegacySQLTypeName.STRING)
    };
// Table schema definition
Schema schema = Schema.of(fields);
LoadJobConfiguration configuration =
    LoadJobConfiguration.builder(tableId, sourceUri)
        .setFormatOptions(FormatOptions.json())
        .setCreateDisposition(CreateDisposition.CREATE_IF_NEEDED)
        .setSchema(schema)
        .build();
// Load the table
Job loadJob = bigquery.create(JobInfo.of(configuration));
loadJob = loadJob.waitFor();
// Check the table
System.out.println("State: " + loadJob.getStatus().getState());
return ((StandardTableDefinition) bigquery.getTable(tableId).getDefinition()).getNumRows();

Node.js

在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的操作說明設定 Node.js。詳情請參閱 BigQuery Node.js API 參考說明文件

// Import the Google Cloud client libraries
const {BigQuery} = require('@google-cloud/bigquery');
const {Storage} = require('@google-cloud/storage');

// Instantiate clients
const bigquery = new BigQuery();
const storage = new Storage();

/**
 * This sample loads the json file at
 * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.json
 *
 * TODO(developer): Replace the following lines with the path to your file.
 */
const bucketName = 'cloud-samples-data';
const filename = 'bigquery/us-states/us-states.json';

async function loadJSONFromGCS() {
  // Imports a GCS file into a table with manually defined schema.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";
  // const tableId = "my_table";

  // Configure the load job. For full list of options, see:
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad
  const metadata = {
    sourceFormat: 'NEWLINE_DELIMITED_JSON',
    schema: {
      fields: [
        {name: 'name', type: 'STRING'},
        {name: 'post_abbr', type: 'STRING'},
      ],
    },
    location: 'US',
  };

  // Load data from a Google Cloud Storage file into the table
  const [job] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .load(storage.bucket(bucketName).file(filename), metadata);
  // load() waits for the job to finish
  console.log(`Job ${job.id} completed.`);

  // Check the job's status for errors
  const errors = job.status.errors;
  if (errors && errors.length > 0) {
    throw errors;
  }
}

PHP

在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的操作說明設定 PHP。詳情請參閱 BigQuery PHP API 參考說明文件

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
// $projectId  = 'The Google project ID';
// $datasetId  = 'The BigQuery dataset ID';

// instantiate the bigquery table service
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table('us_states');

// create the import job
$gcsUri = 'gs://cloud-samples-data/bigquery/us-states/us-states.json';
$schema = [
    'fields' => [
        ['name' => 'name', 'type' => 'string'],
        ['name' => 'post_abbr', 'type' => 'string']
    ]
];
$loadConfig = $table->loadFromStorage($gcsUri)->schema($schema)->sourceFormat('NEWLINE_DELIMITED_JSON');
$job = $table->runJob($loadConfig);
// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});
// check if the job has errors
if (isset($job->info()['status']['errorResult'])) {
    $error = $job->info()['status']['errorResult']['message'];
    printf('Error running job: %s' . PHP_EOL, $error);
} else {
    print('Data imported successfully' . PHP_EOL);
}

Python

在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的操作說明設定 Python。詳情請參閱 BigQuery Python API 參考說明文件

使用 Client.load_table_from_uri() 方法,從 Cloud Storage 啟動載入工作。如要使用以換行符號分隔的 JSON,請將 LoadJobConfig.source_format 屬性設為 NEWLINE_DELIMITED_JSON 字串,並將工作設定做為 job_config 引數傳送至 load_table_from_uri() 方法。

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'my_dataset'

dataset_ref = client.dataset(dataset_id)
job_config = bigquery.LoadJobConfig()
job_config.schema = [
    bigquery.SchemaField("name", "STRING"),
    bigquery.SchemaField("post_abbr", "STRING"),
]
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
uri = "gs://cloud-samples-data/bigquery/us-states/us-states.json"

load_job = client.load_table_from_uri(
    uri,
    dataset_ref.table("us_states"),
    location="US",  # Location must match that of the destination dataset.
    job_config=job_config,
)  # API request
print("Starting job {}".format(load_job.job_id))

load_job.result()  # Waits for table load to complete.
print("Job finished.")

destination_table = client.get_table(dataset_ref.table("us_states"))
print("Loaded {} rows.".format(destination_table.num_rows))

Ruby

在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的操作說明設定 Ruby。詳情請參閱 BigQuery Ruby API 參考說明文件

使用 Dataset.load_job() 方法,從 Cloud Storage 啟動載入工作。如要使用以換行符號分隔的 JSON,請將 format 參數設為 "json"

require "google/cloud/bigquery"

def load_table_gcs_json dataset_id = "your_dataset_id"
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  gcs_uri  = "gs://cloud-samples-data/bigquery/us-states/us-states.json"
  table_id = "us_states"

  load_job = dataset.load_job table_id, gcs_uri, format: "json" do |schema|
    schema.string "name"
    schema.string "post_abbr"
  end
  puts "Starting job #{load_job.job_id}"

  load_job.wait_until_done!  # Waits for table load to complete.
  puts "Job finished."

  table = dataset.table(table_id)
  puts "Loaded #{table.rows_count} rows to table #{table.id}"
end

載入巢狀和重複的 JSON 資料

BigQuery 可從支援物件型結構定義的來源格式 (例如 JSON、Avro、ORC、Parquet、Cloud Firestore 和 Cloud Datastore) 載入巢狀與重複的資料。

每一行中都必須有一個 JSON 物件 (包括任何巢狀/重複欄位)。

以下是巢狀/重複資料的範例。這個資料表含有人員相關資訊,組成欄位如下:

  • id
  • first_name
  • last_name
  • dob (生日)
  • addresses (巢狀與重複欄位)
    • addresses.status (目前或之前)
    • addresses.address
    • addresses.city
    • addresses.state
    • addresses.zip
    • addresses.numberOfYears (在此地址居住的年數)

JSON 資料欄位如下所示。請注意,地址欄位含有值陣列 (以 [ ] 表示)。

{"id":"1","first_name":"John","last_name":"Doe","dob":"1968-01-22","addresses":[{"status":"current","address":"123 First Avenue","city":"Seattle","state":"WA","zip":"11111","numberOfYears":"1"},{"status":"previous","address":"456 Main Street","city":"Portland","state":"OR","zip":"22222","numberOfYears":"5"}]}
{"id":"2","first_name":"Jane","last_name":"Doe","dob":"1980-10-16","addresses":[{"status":"current","address":"789 Any Avenue","city":"New York","state":"NY","zip":"33333","numberOfYears":"2"},{"status":"previous","address":"321 Main Street","city":"Hoboken","state":"NJ","zip":"44444","numberOfYears":"3"}]}

此資料表的結構定義如下所示:

[
    {
        "name": "id",
        "type": "STRING",
        "mode": "NULLABLE"
    },
    {
        "name": "first_name",
        "type": "STRING",
        "mode": "NULLABLE"
    },
    {
        "name": "last_name",
        "type": "STRING",
        "mode": "NULLABLE"
    },
    {
        "name": "dob",
        "type": "DATE",
        "mode": "NULLABLE"
    },
    {
        "name": "addresses",
        "type": "RECORD",
        "mode": "REPEATED",
        "fields": [
            {
                "name": "status",
                "type": "STRING",
                "mode": "NULLABLE"
            },
            {
                "name": "address",
                "type": "STRING",
                "mode": "NULLABLE"
            },
            {
                "name": "city",
                "type": "STRING",
                "mode": "NULLABLE"
            },
            {
                "name": "state",
                "type": "STRING",
                "mode": "NULLABLE"
            },
            {
                "name": "zip",
                "type": "STRING",
                "mode": "NULLABLE"
            },
            {
                "name": "numberOfYears",
                "type": "STRING",
                "mode": "NULLABLE"
            }
        ]
    }
]

要瞭解如何指定巢狀和重複結構定義,請參閱指定巢狀和重複的欄位相關文章。

將 JSON 資料附加或覆寫至資料表

如要將其他資料載入資料表,您可以指定來源檔案或附加查詢結果。

在主控台及傳統版 BigQuery 網頁版 UI 中,使用 [Write preference] (寫入偏好設定) 選項來指定從來源檔案或從查詢結果載入資料時採取的動作。

將額外資料載入表格時,可以選擇下列選項:

主控台選項 傳統網頁版 UI 選項 CLI 標記 BigQuery API 屬性 說明
空白時寫入 空白時寫入 WRITE_EMPTY 資料表空白時才會寫入資料。
附加到資料表中 附加到資料表中 --noreplace--replace=false;如果未指定 --[no]replace,預設動作為附加 WRITE_APPEND (預設值) 將資料附加至資料表末尾。
覆寫資料表 覆寫資料表 --replace--replace=true WRITE_TRUNCATE 清除資料表中所有現有的資料後再寫入新資料。

如果您將資料載入至現有的資料表,則這項載入工作可附加資料或覆寫資料表。

您可以透過以下方式附加或覆寫資料表:

  • 使用 GCP Console 或傳統網頁版 UI
  • 使用 CLI 的 bq load 指令
  • 呼叫 jobs.insert API 方法並設定 load 工作
  • 使用用戶端程式庫

主控台

  1. 在 GCP Console 中開啟 BigQuery 網頁版 UI。
    前往 GCP Console

  2. 在導覽面板的「Resources」(資源) 區段,展開您的專案並選取資料集。

  3. 在視窗右側的「details」(詳細資料) 面板中,按一下 [Create table] (建立資料表)。附加和覆寫資料的程序與在載入工作中建立資料表的程序相同。

    建立資料表

  4. 在「Create table」(建立資料表) 頁面的「Source」(來源) 區段中:

    • 在「Create table from」(使用下列資料建立資料表) 中,選取 [Cloud Storage]。

    • 在「Source」(來源) 欄位中,瀏覽或輸入 Cloud Storage URI。請注意,您無法在 BigQuery 網頁版 UI 中輸入多個 URI,但可以使用萬用字元。Cloud Storage 值區的位置必須與您要附加或覆寫的資料表所在的資料集位置相同。

      選取檔案

    • 在「File format」(檔案格式) 選取 [JSON (Newline Delimited)] (JSON (以換行符號分隔))

  5. 在「Create table」(建立資料表) 頁面的「Destination」(目的地) 區段中:

    • 在「Dataset name」(資料集名稱) 部分選擇適當的資料集。

      選取資料集

    • 在「Table name」(資料表名稱) 欄位中,輸入您要在 BigQuery 中附加或覆寫資料的資料表名稱。

    • 確認「Table type」(資料表類型) 已設為「Native table」(原生資料表)

  6. 在「Schema」(結構定義) 區段的「Auto-detect」(自動偵測) 底下,勾選 [Schema and input parameters] (結構定義和輸入參數) 核取方塊,以啟用結構定義自動偵測功能。或者,您可以透過以下方式手動輸入結構定義

    • 啟用 [Edit as text] (以文字形式編輯),然後以 JSON 陣列的形式輸入資料表結構定義。

      以 JSON 陣列新增結構定義

    • 按一下 [Add Field] (新增欄位) 並手動輸入結構定義。

      使用 [Add Field] (新增欄位) 按鈕加入結構定義

  7. 「Partition and cluster settings」(分區與叢集設定) 部分請保留預設值。您不能藉由附加或覆寫方式,將資料表轉換為分區資料表或叢集資料表,GCP Console 不支援在載入工作中附加/覆寫分區資料表或叢集資料表。

  8. 按一下 [Advanced options] (進階選項)

    • 針對「Write preference」(寫入偏好設定),選擇 [Append to table] (附加到資料表中) 或 [Overwrite table] (覆寫資料表)
    • 針對「Number of errors allowed」(允許的錯誤數量) 欄位,請接受預設值 0,或輸入可忽略的含錯列數上限。如果含錯的列數超過這個值,該項工作就會導致 invalid 訊息並失敗。
    • 「Unknown values」(不明的值) 部分請勾選 [Ignore unknown values] (略過不明的值),這樣一來,當資料列不在資料表的結構定義中,系統就會忽略該資料列中的值。
    • 針對「Encryption」(加密),請按一下 [Customer-managed key] (客戶管理的金鑰),以使用 Cloud Key Management Service 金鑰。如果您保留「Google-managed key」(Google 代管的金鑰) 這項設定,則 BigQuery 會加密靜態資料

      覆寫資料表

  9. 按一下 [Create table] (建立資料表)。

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。
    前往 BigQuery 網頁版 UI

  2. 在導覽面板中,將游標懸停在某個資料集上,按一下向下箭頭圖示 向下箭號圖示圖片,然後點選 [Create new table] (建立新資料表)。在載入工作中,附加和覆寫資料的程序與在載入工作中建立資料表的程序相同。

  3. 在「Create Table」(建立資料表) 頁面的「Source Data」(來源資料) 區段中:

    • 「Location」(位置) 部分請選取 [Cloud Storage],然後在「Source」(來源) 欄位輸入 Cloud Storage URI。請注意,您無法在 UI 中輸入多個 URI,但可以使用萬用字元。Cloud Storage 值區的位置必須與您要附加或覆寫的資料表所在的資料集位置相同。
    • 在「File format」(檔案格式) 選取 [JSON (Newline Delimited)] (JSON (以換行符號分隔))
  4. 在「Create Table」(建立資料表) 頁面的「Destination Table」(目的地資料表) 區段中:

    • 在「Table name」(資料表名稱) 部分選擇適當的資料集,然後在資料表名稱欄位中輸入要附加或覆寫的資料表名稱。
    • 確認「Table type」(資料表類型) 已設為「Native table」(原生資料表)
  5. 在「Schema」(結構定義) 區段中,輸入結構定義

    • 如為 JSON 檔案,您可以勾選 [Auto-detect] (自動偵測) 選項來啟用結構定義自動偵測功能。

      自動偵測連結

    • 您也可以使用下列任一種方式,手動輸入結構定義資訊:

      • 按一下 [Edit as text] (以文字形式編輯),然後以 JSON 陣列的形式輸入資料表結構定義:

        以 JSON 陣列新增結構定義

      • 按一下 [Add Field] (新增欄位) 並手動輸入結構定義。

        使用新增欄位功能來新增結構定義

  6. 在「Options」(選項) 區段中:

    • 針對「Number of errors allowed」(允許的錯誤數量) 欄位,請接受預設值 0,或輸入可忽略的含錯列數上限。如果含錯的列數超過這個值,該項工作就會導致 invalid 訊息並失敗。
    • 針對「Write preference」(寫入偏好設定),選擇 [Append to table] (附加到資料表中) 或 [Overwrite table] (覆寫資料表)
    • 「Partitioning Type」(分區類型)、「Partitioning Field」(分區欄位)、「Require partition filter」(需要分區篩選器) 和「Clustering fields」(分群欄位),請全都保留預設值。您不能藉由附加或覆寫方式,將資料表轉換為分區資料表或叢集資料表,網頁版 UI 不支援在載入工作中附加/覆寫分區資料表或叢集資料表。
    • 針對「Destination encryption」(目的地加密),請按一下 [Customer-managed encryption] (客戶管理的加密),以使用 Cloud Key Management Service 金鑰來加密資料表。如果您保留 Default 設定,BigQuery 會使用 Google 代管的金鑰來加密靜態資料
  7. 按一下 [Create Table] (建立資料表)

CLI

使用 bq load 指令,接著使用 --source_format 標記指定 NEWLINE_DELIMITED_JSON,然後加入 Cloud Storage URI。您可以加入單一 URI、逗號分隔的 URI 清單或包含萬用字元的 URI。

在結構定義檔中以內嵌方式提供結構定義,或使用結構定義自動偵測功能。

指定 --replace 標記來覆寫資料表。使用 --noreplace 標記將資料附加至資料表。未指定任何標記時,預設為附加資料。

您可以在附加或覆寫資料表時修改資料表的結構定義。如要進一步瞭解載入作業期間可進行的結構定義變更,請參閱修改資料表結構定義

(選用) 提供 --location 標記,並將值設為您的位置

其他選用標記包括:

  • --max_bad_records:這是一個整數,用來指定整個工作失敗前可允許的錯誤記錄數量上限。預設值為 0。無論 --max_bad_records 的值為何,系統最多只會傳回五個任何類型的錯誤。
  • --ignore_unknown_values:如果指定了這個標記,CSV 或 JSON 資料中就可以含有其他無法辨識的值 (但系統會予以忽略)。
  • --autodetect:如果指定了這個標記,系統會針對 CSV 和 JSON 資料啟用結構定義自動偵測功能。
  • --destination_kms_key:用來加密資料表資料的 Cloud KMS 金鑰。
bq --location=location load \
--[no]replace \
--source_format=format \
dataset.table \
path_to_source \
schema

其中:

  • 「location」是您的位置--location 是選用標記。您可以使用 .bigqueryrc 檔案設定位置的預設值。
  • 「format」NEWLINE_DELIMITED_JSON
  • 「dataset」是現有資料集。
  • 「table」是您要載入資料的目標資料表的名稱。
  • 「path_to_source」是完整的 Cloud Storage URI,或是以逗號分隔的 URI 清單。您也可以使用萬用字元
  • 「schema」是有效的結構定義。結構定義可以是本機 JSON 檔案,或以內嵌的方式在指令中輸入。您也可以改用 --autodetect 標記而不提供結構定義。

示例:

下列指令會載入 gs://mybucket/mydata.json 中的資料,並覆寫 mydataset 中名為 mytable 的資料表。結構定義是使用結構定義自動偵測定義的。

    bq load \
    --autodetect \
    --replace \
    --source_format=NEWLINE_DELIMITED_JSON \
    mydataset.mytable \
    gs://mybucket/mydata.json

下列指令會載入 gs://mybucket/mydata.json 中的資料,並將資料附加至 mydataset 中名為 mytable 的資料表。結構定義是在 JSON 結構定義檔 (即 myschema.json) 中指定。

    bq load \
    --noreplace \
    --source_format=NEWLINE_DELIMITED_JSON \
    mydataset.mytable \
    gs://mybucket/mydata.json \
    ./myschema.json

API

  1. 建立指向 Cloud Storage 中來源資料的 load 工作。

  2. (選用) 在工作資源jobReference 區段中,於 location 屬性指定您的位置

  3. source URIs 屬性必須完整且採用下列格式:gs://bucket/object。您可以使用逗號分隔清單的形式包含多個 URI。請注意,您也可以使用萬用字元

  4. configuration.load.sourceFormat 屬性設為 NEWLINE_DELIMITED_JSON 以指定資料格式。

  5. configuration.load.writeDisposition 屬性設為 WRITE_TRUNCATEWRITE_APPEND,以指定寫入偏好設定。

Go

在試行此示例之前,請至 BigQuery 快速入門導覽課程:使用用戶端程式庫,按照 Go 設定說明進行操作。詳情請參閱 BigQuery Go API 參考說明文件

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/us-states/us-states.json")
gcsRef.SourceFormat = bigquery.JSON
gcsRef.AutoDetect = true
loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)
loader.WriteDisposition = bigquery.WriteTruncate

job, err := loader.Run(ctx)
if err != nil {
	return err
}
status, err := job.Wait(ctx)
if err != nil {
	return err
}

if status.Err() != nil {
	return fmt.Errorf("job completed with error: %v", status.Err())
}

Node.js

在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的操作說明設定 Node.js。詳情請參閱 BigQuery Node.js API 參考說明文件

// Import the Google Cloud client libraries
const {BigQuery} = require('@google-cloud/bigquery');
const {Storage} = require('@google-cloud/storage');

// Instantiate clients
const bigquery = new BigQuery();
const storage = new Storage();

/**
 * This sample loads the JSON file at
 * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.json
 *
 * TODO(developer): Replace the following lines with the path to your file.
 */
const bucketName = 'cloud-samples-data';
const filename = 'bigquery/us-states/us-states.json';

async function loadJSONFromGCSTruncate() {
  /**
   * Imports a GCS file into a table and overwrites
   * table data if table already exists.
   */

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";
  // const tableId = "my_table";

  // Configure the load job. For full list of options, see:
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad
  const metadata = {
    sourceFormat: 'NEWLINE_DELIMITED_JSON',
    schema: {
      fields: [
        {name: 'name', type: 'STRING'},
        {name: 'post_abbr', type: 'STRING'},
      ],
    },
    // Set the write disposition to overwrite existing table data.
    writeDisposition: 'WRITE_TRUNCATE',
  };

  // Load data from a Google Cloud Storage file into the table
  const [job] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .load(storage.bucket(bucketName).file(filename), metadata);
  // load() waits for the job to finish
  console.log(`Job ${job.id} completed.`);

  // Check the job's status for errors
  const errors = job.status.errors;
  if (errors && errors.length > 0) {
    throw errors;
  }
}

PHP

在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的操作說明設定 PHP。詳情請參閱 BigQuery PHP API 參考說明文件

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';
// $tableID = 'The BigQuery table ID';

// instantiate the bigquery table service
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$table = $bigQuery->dataset($datasetId)->table($tableId);

// create the import job
$gcsUri = 'gs://cloud-samples-data/bigquery/us-states/us-states.json';
$loadConfig = $table->loadFromStorage($gcsUri)->sourceFormat('NEWLINE_DELIMITED_JSON')->writeDisposition('WRITE_TRUNCATE');
$job = $table->runJob($loadConfig);

// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});

// check if the job has errors
if (isset($job->info()['status']['errorResult'])) {
    $error = $job->info()['status']['errorResult']['message'];
    printf('Error running job: %s' . PHP_EOL, $error);
} else {
    print('Data imported successfully' . PHP_EOL);
}

Python

如要取代現有資料表中的資料列,請將 LoadJobConfig.write_disposition 屬性設為字串 WRITE_TRUNCATE

在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的操作說明設定 Python。詳情請參閱 BigQuery Python API 參考說明文件

# from google.cloud import bigquery
# client = bigquery.Client()
# table_ref = client.dataset('my_dataset').table('existing_table')

job_config = bigquery.LoadJobConfig()
job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
uri = "gs://cloud-samples-data/bigquery/us-states/us-states.json"
load_job = client.load_table_from_uri(
    uri, table_ref, job_config=job_config
)  # API request
print("Starting job {}".format(load_job.job_id))

load_job.result()  # Waits for table load to complete.
print("Job finished.")

destination_table = client.get_table(table_ref)
print("Loaded {} rows.".format(destination_table.num_rows))

Ruby

如要取代現有資料表中的資料列,請將 Table.load_job()write 參數設為 "WRITE_TRUNCATE"

在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的操作說明設定 Ruby。詳情請參閱 BigQuery Ruby API 參考說明文件

require "google/cloud/bigquery"

def load_table_gcs_json_truncate(
    dataset_id = "your_dataset_id",
    table_id   = "your_table_id"
  )
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  gcs_uri  = "gs://cloud-samples-data/bigquery/us-states/us-states.json"

  load_job = dataset.load_job table_id,
                              gcs_uri,
                              format: "json",
                              write:  "truncate"
  puts "Starting job #{load_job.job_id}"

  load_job.wait_until_done!  # Waits for table load to complete.
  puts "Job finished."

  table = dataset.table(table_id)
  puts "Loaded #{table.rows_count} rows to table #{table.id}"
end

JSON 選項

如要變更 BigQuery 剖析 JSON 資料的方式,請在主控台、傳統版 UI、CLI、API 或用戶端程式庫中指定額外選項。

JSON 選項 主控台選項 傳統版 UI 選項 CLI 標記 BigQuery API 屬性 說明
Number of bad records allowed (允許的損壞紀錄數量) Number of errors allowed (允許的錯誤數量) Number of errors allowed (允許的錯誤數量) --max_bad_records maxBadRecords (選用) BigQuery 在執行工作時可忽略的損壞記錄數量上限。如果損壞記錄的數量超過這個值,系統會在工作結果中傳回無效錯誤。預設值為 0,表示所有記錄都必須有效。
Unknown values (不明的值) Ignore unknown values (略過不明的值) Ignore unknown values (略過不明的值) --ignore_unknown_values ignoreUnknownValues (選用) 指示 BigQuery 是否允許資料表結構定義中沒有其他值。如為 true,系統將忽略其他值。如為 false,系統會將包含其他欄位的記錄視為損壞記錄;如果損壞記錄過多,工作結果就會顯示無效錯誤。預設值為 false。sourceFormat 屬性決定 BigQuery 將什麼視為其他值:如為 CSV,則是結尾資料欄;如為 JSON,則是不符合任何資料欄名稱的已命名值。
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁