批次載入資料

您可以透過批次作業,將資料從 Cloud Storage 或本機檔案載入 BigQuery。來源資料可以是下列任一格式:

  • Avro
  • 逗號分隔值 (CSV)
  • JSON (以換行符號分隔)
  • ORC
  • Parquet
  • 儲存在 Cloud Storage 中的 Datastore 匯出資料
  • 儲存在 Cloud Storage 中的 Firestore 匯出資料

您也可以使用 BigQuery 資料移轉服務,設定從 Cloud Storage 到 BigQuery 的週期性載入作業。

歡迎試用

如果您未曾使用過 Google Cloud,歡迎建立帳戶,親自體驗實際使用 BigQuery 的成效。新客戶可以獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。

免費試用 BigQuery

事前準備

授予身分與存取權管理 (IAM) 角色,讓使用者取得執行本文件中各項工作的必要權限,並建立資料集來儲存資料。

所需權限

如要將資料載入 BigQuery,您必須具備 IAM 權限,才能執行載入工作,並將資料載入 BigQuery 資料表和分區。如要從 Cloud Storage 載入資料,您也需要 IAM 權限存取包含資料的值區。

將資料載入 BigQuery 的權限

如要將資料載入新的 BigQuery 資料表或分區,或是附加或覆寫現有資料表或分區,您需要具備下列 IAM 權限:

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

以下每個預先定���的 IAM 角色都包含將資料載入 BigQuery 資料表或分區所需的權限:

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin (包含 bigquery.jobs.create 權限)
  • bigquery.user (包含 bigquery.jobs.create 權限)
  • bigquery.jobUser (包含 bigquery.jobs.create 權限)

此外,如果您具備 bigquery.datasets.create 權限,就可以在您建立的資料集中使用載入工作建立及更新資料表。

如要進一步瞭解 BigQuery 中的 IAM 角色和權限,請參閱「預先定義的角色與權限」一文。

從 Cloud Storage 載入資料的權限

如要取得從 Cloud Storage 值區載入資料所需的權限,請要求管理員為您授予該值區的 Storage 管理員 (roles/storage.admin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這個預先定義的角色包含從 Cloud Storage 值區載入資料所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

您必須具備下列權限,才能從 Cloud Storage 值區載入資料:

  • storage.buckets.get
  • storage.objects.get
  • storage.objects.list (required if you are using a URI wildcard)

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

建立資料集

建立 BigQuery 資料集來儲存資料。

載入 Cloud Storage 中的資料

BigQuery 支援從以下任何一種 Cloud Storage 儲存空間級別載入資料:

  • 標準
  • Nearline
  • Coldline
  • 封存

如要瞭解如何將資料載入 BigQuery,請參閱資料格式的頁面:

如要瞭解如何設定從 Cloud Storage 定期載入至 BigQuery 的資料,請參閱「Cloud Storage 移轉」。

位置注意事項

資料集建立之後,即無法更改位置,但您可以建立資料集副本或手動移動資料集。如需詳細資訊,請參閱:

擷取 Cloud Storage URI

如要從 Cloud Storage 資料來源載入資料,您必須提供 Cloud Storage URI。

Cloud Storage 資源路徑包含值區名稱和物件 (檔名)。例如,如果 Cloud Storage 值區的名稱為 mybucket,且資料檔案的名稱為 myfile.csv,則資源路徑會是 gs://mybucket/myfile.csv

BigQuery 不支援 Cloud Storage 資源路徑在初始雙斜線後還有多個連續斜線。Cloud Storage 物件名稱可以包含多個連續的斜線 (「/」) 字元,但 BigQuery 會將多個連續斜線轉換為一個斜線。舉例來說,下列資源路徑在 Cloud Storage 中有效,但在 BigQuery 中則無效:gs://bucket/my//object//name

如何擷取 Cloud Storage 資源路徑:

  1. 開啟 Cloud Storage 主控台。

    Cloud Storage 主控台

  2. 瀏覽至含有來源資料的物件 (檔案) 位置。

  3. 按一下物件的名稱。

    「Object details」頁面隨即開啟。

  4. 複製「gsutil URI」欄位中提供的值,開頭為 gs://

Google Datastore 匯出檔案只能指定一個 URI,而且必須以 .backup_info.export_metadata 結尾。

Cloud Storage URI 的萬用字元支援

如果資料分成多個檔案,您可以使用星號 (*) 萬用字元選取多個檔案。使用星號萬用字元時,必須遵��下列規則:

  • 星號可以出現在物件名稱內或物件名稱的末端。
  • 系統不支援使用多個星號。例如,gs://mybucket/fed-*/temp/*.csv 路徑無效。
  • 系統不支援在值區名稱中使用星號。

範例:

  • 以下範例說明如何選取所有開頭為 gs://mybucket/fed-samples/fed-sample 前置字元的資料夾中的所有檔案:

    gs://mybucket/fed-samples/fed-sample*
    
  • 以下範例說明如何只選取名為 fed-samples 的資料夾和任何 fed-samples 子資料夾中,具有 .csv 副檔名的檔案:

    gs://mybucket/fed-samples/*.csv
    
  • 以下範例說明如何在名為 fed-samples 的資料夾中,選取命名模式為 fed-sample*.csv 的檔案。這個範例不會選取 fed-samples 子資料夾中的檔案。

    gs://mybucket/fed-samples/fed-sample*.csv
    

使用 bq 指令列工具時,在某些平台上可能需要逸出星號。

從 Cloud Storage 載入 Datastore 或 Firestore 匯出資料時,您無法使用星號萬用字元。

限制

將資料從 Cloud Storage 值區載入 BigQuery 時有下列限制:

  • BigQuery 不保證外部資料來源的資料一致性。如果基礎資料在查詢執行期間遭到變更,可能會導致非預期的行為。
  • BigQuery 不支援 Cloud Storage 物件版本控制。如果在 Cloud Storage URI 中加入世代號碼,載入作業就會失敗。

根據 Cloud Storage 來源資料的格式,可能還有其他的限制。如需詳細資訊,請參閱:

從本機檔案載入資料

您可以使用下列任一方式,從可讀取的資料來源 (例如本機電腦) 載入資料:

  • Google Cloud 控制台
  • bq 指令列工具的 bq load 指令
  • API
  • 用戶端程式庫

當您使用 Google Cloud 主控台或 bq 指令列工具載入資料時,系統會自動建立載入工作。

從本機資料來源載入資料:

主控台

  1. 在 Google Cloud 控制台開啟「BigQuery」頁面。

    前往「BigQuery」頁面

  2. 在「Explorer」面板中展開專案並選取資料集。

  3. 展開 「動作」選項,然後按一下「開啟」

  4. 在詳細資料面板中,按一下「Create table」(建立資料表) 圖示

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

    • 針對「Create table from」(使用下列資料建立資料表),選取 [Upload] (上傳)
    • 在「Select file」部分,按一下「Browse」
    • 瀏覽至檔案,然後按一下 [Open] (開啟)。請注意,本機檔案不支援萬用字元和以半形逗號分隔的清單。
    • 在「File format」(檔案格式) 部分,選取 [CSV]、[JSON (newline delimited)] (JSON (以換行符號分隔))、[Avro]、[Parquet] 或 [ORC]
  6. 在「Create table」(建立資料表) 頁面的「Destination」(目的地) 區段中:

    • 在「Project」(專案) 部分,選擇適當的專案。
    • 針對「Dataset」(資料集),選擇適當的資料集。
    • 在「Table」(資料表) 欄位中,輸入您在 BigQuery 中建立資料表時使用的名稱。
    • 確認「Table type」(資料表類型) 設為「Native table」(原生資料表)
  7. 在「Schema」(結構定義) 部分輸入結構定義

    • 如為 CSV 及 JSON 檔案,您可以勾選 [Auto-detect] (自動偵測) 選項,以啟用結構定義自動偵測功能。您可以在其他支援檔案類型的來源資料中找到結構定義資訊。

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

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

      • 使用 [Add Field] (新增欄位) 手動輸入結構定義。

  8. 在「Advanced options」部分中選取適合的項目。如要瞭解可用的選項,請參閱 CSV 選項JSON 選項

  9. 選用:在「Advanced options」(進階選項) 中選擇寫入處置:

    • 空白時寫入:僅在資料表空白時寫入資料。
    • 附加到資料表:將資料附加至資料表尾端。這是預設設定。
    • 覆寫資料表:先清除資料表中的所有現有資料,再寫入新的資料。
  10. 點選「建立資料表」

bq

請使用 bq load 指令來指定 source_format,然後將路徑加入本機檔案中。

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

如果您要在非預設專案中載入資料,請採用下列格式將專案 ID 新增至資料集:PROJECT_ID:DATASET

bq --location=LOCATION load \
--source_format=FORMAT \
PROJECT_ID:DATASET.TABLE \
PATH_TO_SOURCE \
SCHEMA

更改下列內容:

  • LOCATION:您的位置。--location 是選用旗標。舉例來說,如果您在東���地區使用 BigQuery,就可將該旗標的值設為 asia-northeast1。您可以使用 .bigqueryrc 檔案設定位置的預設值。
  • FORMATCSVAVROPARQUETORCNEWLINE_DELIMITED_JSON
  • project_id:您的專案 ID。
  • dataset:現有資料集。
  • table:您要載入資料的資料表名稱。
  • path_to_source:本機檔案的路徑。
  • schema:有效的結構定義。結構定義可以是本機 JSON 檔案,或以內嵌的方式在指令中輸入。您也可以改用 --autodetect 標記,而非提供結構定義。

此外,您還可以針對選項新增旗標,以控制 BigQuery 剖析資料的方式。舉例來說,您可以使用 --skip_leading_rows 旗標,忽略 CSV 檔案中的標題列。詳情請參閱 CSV 選項JSON 選項

範例:

下列指令會將本機電腦中以換行符號分隔的 JSON 檔案 (mydata.json),載入預設專案的 mydataset 中名為 mytable 的資料表。結構定義是在名為 myschema.json 的本機結構定義檔中定義。

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

下列指令會將本機 CSV 檔案 (mydata.csv) 載入至 myotherprojectmydataset 中名為 mytable 的資料表。結構定義是以內嵌的方式定義,格式為 FIELD:DATA_TYPE, FIELD:DATA_TYPE

    bq load \
    --source_format=CSV \
    myotherproject:mydataset.mytable \
    ./mydata.csv \
    qtr:STRING,sales:FLOAT,year:STRING

下列指令會將本機 CSV 檔案 (mydata.csv) 載入至預設專案 mydataset 中名為 mytable 的資料表。而結構定義是利用結構定義自動偵測功能定義的。

    bq load \
    --autodetect \
    --source_format=CSV \
    mydataset.mytable \
    ./mydata.csv

C#

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

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。

下列程式碼示範如何將本機 CSV 檔案載入到新的 BigQuery 資料表。如要載入另一種格式的本機檔案,請使用 JobCreationOptions 基本類別中合適格式的更新選項類別,而非 UploadCsvOptions


using Google.Cloud.BigQuery.V2;
using System;
using System.IO;

public class BigQueryLoadFromFile
{
    public void LoadFromFile(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id",
        string tableId = "your_table_id",
        string filePath = "path/to/file.csv"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        // Create job configuration
        var uploadCsvOptions = new UploadCsvOptions()
        {
            SkipLeadingRows = 1,  // Skips the file headers
            Autodetect = true
        };
        using (FileStream stream = File.Open(filePath, FileMode.Open))
        {
            // Create and run job
            // Note that there are methods available for formats other than CSV
            BigQueryJob job = client.UploadCsv(
                datasetId, tableId, null, stream, uploadCsvOptions);
            job = job.PollUntilCompleted().ThrowOnAnyError();  // Waits for the job to complete.

            // Display the number of rows uploaded
            BigQueryTable table = client.GetTable(datasetId, tableId);
            Console.WriteLine(
                $"Loaded {table.Resource.NumRows} rows to {table.FullyQualifiedId}");
        }
    }
}

Go

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

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。

下列程式碼示範如何將本機 CSV 檔案載入到新的 BigQuery 資料表。如要載入另一種格式的本機檔案,請將 NewReaderSourceDataFormat 屬性設為適當的格式。

import (
	"context"
	"fmt"
	"os"

	"cloud.google.com/go/bigquery"
)

// importCSVFromFile demonstrates loading data into a BigQuery table using a file on the local filesystem.
func importCSVFromFile(projectID, datasetID, tableID, filename string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	f, err := os.Open(filename)
	if err != nil {
		return err
	}
	source := bigquery.NewReaderSource(f)
	source.AutoDetect = true   // Allow BigQuery to determine schema.
	source.SkipLeadingRows = 1 // CSV has a single header line.

	loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(source)

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

Java

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

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。

下列程式碼示範如何將本機 CSV 檔案載入到新的 BigQuery 資料表。如要載入另一種格式的本機檔案,請將 FormatOptions 設為適當的格式。

TableId tableId = TableId.of(datasetName, tableName);
WriteChannelConfiguration writeChannelConfiguration =
    WriteChannelConfiguration.newBuilder(tableId).setFormatOptions(FormatOptions.csv()).build();
// The location must be specified; other fields can be auto-detected.
JobId jobId = JobId.newBuilder().setLocation(location).build();
TableDataWriteChannel writer = bigquery.writer(jobId, writeChannelConfiguration);
// Write data to writer
try (OutputStream stream = Channels.newOutputStream(writer)) {
  Files.copy(csvPath, stream);
}
// Get load job
Job job = writer.getJob();
job = job.waitFor();
LoadStatistics stats = job.getStatistics();
return stats.getOutputRows();

Node.js

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

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。

下列程式碼示範如何將本機 CSV 檔案載入到新的 BigQuery 資料表。如要載入另一種格式的本機檔案,請將 load 函式的 metadata 參數設為合適的格式。

// Imports the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function loadLocalFile() {
  // Imports a local file into a table.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const filename = '/path/to/file.csv';
  // const datasetId = 'my_dataset';
  // const tableId = 'my_table';

  // Load data from a local file into the table
  const [job] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .load(filename);

  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 參考說明文件

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。

下列程式碼示範如何將本機 CSV 檔案載入到新的 BigQuery 資料表。如要載入另一種格式的本機檔案,請將 sourceFormat 設為適當的格式。

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';
// $source     = 'The path to the CSV source file to import';

// instantiate the bigquery table service
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table($tableId);
// create the import job
$loadConfig = $table->load(fopen($source, 'r'))->sourceFormat('CSV');

$job = $table->runJob($loadConfig);
// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    printf('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 參考說明文件

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。

下列程式碼示範如何將本機 CSV 檔案載入到新的 BigQuery 資料表。如要載入另一種格式的本機檔案,請將 LoadJobConfig.source_format 屬性設為適當的格式。

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set table_id to the ID of the table to create.
# table_id = "your-project.your_dataset.your_table_name"

job_config = bigquery.LoadJobConfig(
    source_format=bigquery.SourceFormat.CSV, skip_leading_rows=1, autodetect=True,
)

with open(file_path, "rb") as source_file:
    job = client.load_table_from_file(source_file, table_id, job_config=job_config)

job.result()  # Waits for the job to complete.

table = client.get_table(table_id)  # Make an API request.
print(
    "Loaded {} rows and {} columns to {}".format(
        table.num_rows, len(table.schema), table_id
    )
)

Ruby

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

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機���」。

下列程式碼示範如何將本機 CSV 檔案載入到新的 BigQuery 資料表。如要載入另一種格式的本機檔案,請將 Table#load_job 方法的 format 參數設為合適的格式。

require "google/cloud/bigquery"

def load_from_file dataset_id = "your_dataset_id",
                   file_path  = "path/to/file.csv"
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  table_id = "new_table_id"

  # Infer the config.location based on the location of the referenced dataset.
  load_job = dataset.load_job table_id, file_path do |config|
    config.skip_leading = 1
    config.autodetect   = true
  end
  load_job.wait_until_done! # Waits for table load to complete.

  table = dataset.table table_id
  puts "Loaded #{table.rows_count} rows into #{table.id}"
end

限制

從本機資料來源載入資料時,會受到以下限制:

  • 當您從本機資料來源載入檔案時,無法使用萬用字元和以半形逗號分隔的清單。檔案必須個別載入。
  • 使用 Google Cloud 控制台時,從本機資料來源載入的檔案不得超過 100 MB。如果是較大的檔案,請從 Cloud Storage 載入檔案。

載入工作容量

與查詢的隨選模式類似,載入工作預設會使用共用的運算單元集區。BigQuery 不保證這個共用集區的可用容量或載入工作總處理量。

如要提高吞吐量或預測控管負載工作的容量,您可以建立運算單元保留空間,並指派專屬 PIPELINE 運算單元來執行負載工作。詳情請參閱預留項目指派

載入壓縮與未壓縮資料

針對 Avro、Parquet 和 ORC 格式,BigQuery 支援載入已使用支援的轉碼器壓縮的檔案。不過,BigQuery 不支援載入這些格式中已壓縮的檔案,例如使用 gzip 公用程式壓縮的檔案。

Avro 二進位格式是載入壓縮資料的建議格式。即便資料區塊經過壓縮,系統仍能並行讀取 Avro 資料,因此載入速度還是比較快。如需支援的壓縮轉碼器清單,請參閱「Avro 壓縮」。

Parquet 二進位格式也是不錯的選擇,因為 Parquet 會對每個資料欄進行編碼,這種高效率的處理方式通常可產生較佳的壓縮比率與較小的檔案。Parquet 檔案也會運用壓縮技術來並行載入資料。如需支援的壓縮編碼器清單,請參閱「Parquet 壓縮」。

ORC 二進位制格式提供類似於 Parquet 格式的優點。ORC 檔案中的資料能夠快速載入,是因為系統可以平行讀取資料條。每個資料條中的資料列都會按順序載入。如要最佳化載入時間,請使用大小為 256 MB 以下的資料條。如需支援的壓縮編碼器清單,請參閱「ORC 壓縮」。

對於其他資料格式 (CSV 以及 JSON) 而言,BigQuery 可以快速載入未壓縮的檔案,甚至比壓縮檔還快,這是因為可以平行讀取未壓縮的檔案。由於未壓縮檔案比較大,使用這種檔案可能會超出頻寬限制,在載入到 BigQuery 之前暫存在 Cloud Storage 的資料成本也比較高。請注意,無論是已壓縮還是未壓縮的檔案,都無法保證行的排序。建議您先評估自己的使用情況,再決定要採行哪一種做法。

一般來說,如果頻寬有限,請先使用 gzip 壓縮 CSV 和 JSON 檔案,再上傳至 Cloud Storage。將資料載入 BigQuery 時,CSV 和 JSON 檔案唯一支援的檔案壓縮類型為 gzip。如果載入速度對您的應用程式來說相當重要,您也有足夠的頻寬可載入資料,請將檔案保持在未壓縮狀態。

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

如要在資料表中載入額外資料,您可以指定來源檔案或附加查詢結果。如果資料的結構定義與目標資料表或分區的結構定義不符,您可以在附加或覆寫時更新目標資料表或分區的結構定義。

如果您在附加資料時更新結構定義,BigQuery 可讓您:

  • 新增欄位
  • REQUIRED 欄位放寬為 NULLABLE

如果您是要覆寫資料表,系統一定會覆寫結構定義。覆寫表格時,結構定義更新不受限制。

在 Google Cloud 主控台中,使用「Write preference」選項,指定從來源檔案或查詢結果載入資料時採取的動作。bq 指令列工具和 API 提供下列選項:

主控台選項 bq 工具標記 BigQuery API 屬性 說明
Write if empty WRITE_EMPTY 資料表空白時才會寫入資料。
附加到資料表中 --noreplace--replace=false。如果您沒有指定 --replace,預設值就是附加 WRITE_APPEND (預設值) 將資料附加至資料表尾端。
覆寫資料表 --replace--replace=true WRITE_TRUNCATE 清除資料表中所有現有的資料後再寫入新資料。

配額政策

如要瞭解批次載入資料的配額政策,請參閱「配額與限制」頁面中的「載入工作」相關說明。

查看目前的配額用量

您可以執行 INFORMATION_SCHEMA 查詢,查看在指定時間範圍內執行的工作的中繼資料,瞭解目前查詢、載入、擷取或複製工作使用的情況。您可以比較目前的使用量與配額限制,判斷特定類型工作所使用的配額。以下範例查詢會使用 INFORMATION_SCHEMA.JOBS 檢視畫面,依專案列出查詢、載入、擷取和複製工作數量:

SELECT
  sum(case  when job_type="QUERY" then 1 else 0 end) as QRY_CNT,
  sum(case  when job_type="LOAD" then 1 else 0 end) as LOAD_CNT,
  sum(case  when job_type="EXTRACT" then 1 else 0 end) as EXT_CNT,
  sum(case  when job_type="COPY" then 1 else 0 end) as CPY_CNT
FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE date(creation_time)= CURRENT_DATE()

定價

使用共用運算單元集區將資料批次載入 BigQuery 時,不需支付費用。詳情請參閱 BigQuery 資料攝入價格

用途範例

���設��一個每晚的批次處理管道,需要在固定的期限內完成。資料必須在這個期限前提供,以便由其他批次程序進一步處理,產生要傳送給監管機構的報表。金融業等受管制行業常見這種用途。

使用載入工作批次載入資料是這個用途的正確做法,因為只要能準時完成,延遲時間就不是問題。請確認 Cloud Storage 值區符合位置要求,才能將資料載入 BigQuery 資料集。

BigQuery 載入工作的結果是原子性的,要嘛所有記錄都會插入,要嘛一點都不插入。最佳做法是,在單一載入工作中插入所有資料時,使用 JobConfigurationLoad 資源的 WRITE_TRUNCATE 處置,建立新資料表。在重試失敗的載入工作時,這一點非常重要,因為用戶端可能無法區分失敗的工作,以及因傳回成功狀態給用戶端而導致的失敗。

假設要擷取的資料已成功複製到 Cloud Storage,只要使用指數型延遲再試,即可解決擷取失敗的問題。

建議每晚的批次工作不要超過預設配額,即每個資料表每日最多 1,500 次載入,即使重試也一樣。當您以遞增方式載入資料時,預設配額就足以每 5 分鐘執行一次載入工作,且平均每項工作至少有 1 次未使用的配額。