匯出資料表資料

本頁說明如何匯出或擷取 BigQuery 資料表中的資料。

當您把資料載入 BigQuery 之後,就能匯出多種格式的資料。BigQuery 最多可把 1 GB 的資料匯出成單一檔案。如果您要匯出的資料超過 1 GB,就必須將資料匯出成多個檔案。當您將資料匯出成多個檔案時,各個檔案的大小會有所差異。

您可以使用 Cloud Dataflow 等服務來讀取 BigQuery 中的資料,不必手動將資料匯出。如要進一步瞭解如何使用 Cloud Dataflow 讀取及寫入 BigQuery,請參閱 Apache Beam 說明文件中的 BigQuery I/O

所需權限

如要將資料匯出至 Cloud Storage,您必須擁有存取資料所屬 BigQuery 資料表的權限、執行匯出工作的權限,以及將資料寫入 Cloud Storage 值區的權限。

BigQuery 權限

  • 您至少必須擁有 bigquery.tables.export 權限,才能匯出資料。以下是擁有 bigquery.tables.export 權限的預先定義 Cloud IAM 角色:

    • bigquery.dataViewer
    • bigquery.dataOwner
    • bigquery.dataEditor
    • bigquery.admin
  • 您至少必須擁有 bigquery.jobs.create 權限,才能執行匯出工作。以下是擁有 bigquery.jobs.create 權限的預先定義 Cloud IAM 角色:

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

Cloud Storage 權限

  • 如要將資料寫入現有的 Cloud Storage 值區,您必須擁有 storage.objects.create 權限。以下是擁有 storage.objects.create 權限的預先定義 Cloud IAM 角色:

    • storage.objectCreator
    • storage.objectAdmin
    • storage.admin

匯出限制

當您從 BigQuery 匯出資料時,請注意以下幾點:

  • 您無法將資料表的資料匯出至本機檔案、Google 試算表,或是 Google 雲端硬碟。唯一支援的匯出位置是 Cloud Storage。如需儲存查詢結果的相關資訊,請參閱下載並儲存查詢結果
  • 您最多可將 1 GB 的資料表資料匯出至單一檔案。如果您要匯出的資料超過 1 GB,請使用萬用字元將資料匯出至多個檔案。當您將資料匯出至多個檔案時,各個檔案的大小會有所差異。
  • 您無法匯出 CSV 格式的巢狀和重複的資料。巢狀與重複資料適用於 Avro 和 JSON 格式的匯出作業。
  • 當您匯出 JSON 格式的資料時,系統會將 INT64 (整數) 資料類型編碼為 JSON 字串,好讓該資料在受到其他系統讀取時能保留 64 位元精確度。
  • 您無法在單一匯出工作中,從多個資料表匯出資料。
  • 當您從分區資料表匯出資料時,無法匯出個別分區。
  • 當您使用 GCP Console 或 BigQuery 傳統網頁版 UI 匯出資料時,無法選擇 GZIP 以外的壓縮類型。

位置注意事項

當您選擇資料的位置時,請考慮下列事項:

  • 把您的數個 Cloud Storage 值區都放置在同一個位置,方便您匯出資料。
    • 當您匯出資料時,地區或多地區 Cloud Storage 值區的位置,必須與 BigQuery 資料集的位置相同。舉例來說,如果您的 BigQuery 資料集位在歐盟多地區位置,則包含匯出資料的 Cloud Storage 值區就必須位在歐盟的地區或多地區位置。
    • 如果您的資料集是位在地區位置,則您的 Cloud Storage 值區必須是相同位置的地區值區。舉例來說,如果您的資料集位於東京地區,則您的 Cloud Storage 值區必須是位於東京的地區值區。
    • 例外情況:如果您的資料集是位在美國多地區位置,則您可將資料匯出至任何地區或多地區位置的 Cloud Storage 值區裡。
  • 擬定資料管理方案。
    • 如果您選擇的是地區性的儲存空間資源 (例如 BigQuery 資料集或 Cloud Storage 值區),請擬定資料異地備援管理方案。

    如要進一步瞭解 Cloud Storage 位置,請參閱 Cloud Storage 說明文件中的值區位置

    在不同位置之間移動 BigQuery 資料

    資料集建立之後,就無法更改位置,但您可以建立該資料集的副本。您無法把資料集移動到另一個位置,但您可以手動移動 (重新建立) 資料集

    複製資料集

    如要查看複製資料集的步驟 (包括跨地區),請參閱複製資料集

    移動資料集

    如要手動將資料集移動到另一個位置,請按照下列程序進行:

    1. 將 BigQuery 資料表的資料匯出到單一地區或多地區的 Cloud Storage 值區,且這個值區的位置必須與資料集的相同。舉例來說,如果您的資料集位在歐盟的多地區位置,您就必須把資料匯出到歐盟的單一地區或多地區值區。

      從 BigQuery 中匯出資料並不需要付費,但是在 Cloud Storage 儲存匯出的資料則會產生費用。BigQuery 匯出作業會受到匯出工作的相關限制。

    2. 將您 Cloud Storage 值區中的資料,複製或移動到新位置的單一地區或多地區值區。舉例來說,如果您要將資料從美國多地區位置移到東京的單一地區位置,則必須把資料移轉到東京的地區值區。如要瞭解如何移轉 Cloud Storage 物件,請參閱 Cloud Storage 說明文件中的重新命名、複製及移動物件一文。

      請注意,在不同地區之間移轉資料將導致 Cloud Storage 產生網路輸出費用

    3. 將資料移轉至新位置的 Cloud Storage 值區後,請在新位置建立新的 BigQuery 資料集,然後將資料從 Cloud Storage 值區載入 BigQuery。

      將資料載入 BigQuery 無須支付費用,但將資料儲存於 Cloud Storage 則須支付費用,直到您刪除資料或值區為止。載入資料之後,將資料儲存至 BigQuery 亦須支付相關費用。將資料載入 BigQuery 時會受到載入工作的相關限制。

    如要進一步瞭解如何使用 Cloud Storage 來儲存及移動大型資料集,請參閱搭配大數據使用 Cloud Storage

    匯出格式與壓縮類型

    BigQuery 支援下列匯出資料用的資料格式與壓縮類型:

    資料格式 支援的壓縮類型 詳細資料
    CSV GZIP

    您可以控制已匯出資料中的 CSV 分隔符號,方法是使用 --field_delimiter CLI 標記,或是使用 configuration.extract.fieldDelimiter。擷取工作屬性。

    不支援巢狀與重複資料。

    JSON GZIP 支援巢狀與重複資料。
    Avro DEFLATE、SNAPPY

    Avro 不支援以 GZIP 格式匯出項目。

    支援巢狀與重複資料。

    匯出儲存在 BigQuery 的資料

    請透過下列方式匯出資料表的資料:

    • 使用 GCP Console 或 BigQuery 傳統網頁版 UI
    • 使用 bq extract CLI 指令
    • 透過 API 或用戶端程式庫提交 extract 工作

    匯出資料表資料

    如何匯出 BigQuery 資料表的資料:

    主控台

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

    2. 在導覽面板的「Resources」(資源) 區段中展開您的專案,然後按一下要展開的資料集。找出並點選包含匯出資料的資料表。

    3. 按一下視窗右側的 [Export] (匯出),然後選取 [Export to Cloud Storage] (匯出至 Cloud Storage)。

      匯出資料

    4. 在「Export to Cloud Storage」(匯出至 Cloud Storage) 對話方塊中:

      • 針對「Select Cloud Storage location」(選取 Cloud Storage 位置),請瀏覽至您要匯出資料的值區、資料夾或檔案。
      • 針對「Export format」(匯出格式),請選擇已匯出資料的格式:[CSV]、[JSON (Newline Delimited)] (JSON (以換行符號分隔)) 或 [Avro]。
      • 針對「Compression」(壓縮選項),請接受預設值 None,或是選擇 GZIP。Avro 格式無法與 GZIP 壓縮類型搭配使用。如要壓縮 Avro 資料,請使用 bq 指令列工具或 API,然後指定 Avro 資料支援的其中一種壓縮類型:DEFLATESNAPPY
      • 按一下 [Export] (匯出) 以匯出資料表。

    如要查看工作進度,請在接近導覽窗格頂端的地方尋找「Export」(匯出) 工作的「Job history」(工作記錄) 。

    傳統版 UI

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

    2. 在導覽窗格中,按一下要展開的資料集。

    3. 尋找您要匯出的資料所屬資料表旁的向下箭號圖示 向下箭號圖示的圖片,然後按一下該圖示。

    4. 選取 [Export table] (匯出資料表) 以顯示「Export to Cloud Storage」(匯出至 Cloud Storage) 對話方塊。

    5. 在「Export to Cloud Storage」(匯出至 Cloud Storage) 對話方塊中:

      • 針對「Export format」(匯出格式),請選擇已匯出資料的格式:[CSV]、[JSON (Newline Delimited)] (JSON (以換行符號分隔)) 或 [Avro]。
      • 針對「Compression」(壓縮選項),請接受預設值 None,或是選擇 GZIP。Avro 格式無法與 GZIP 壓縮類型搭配使用。如要壓縮 Avro 資料,請使用 bq 指令列工具或 API,然後指定 Avro 資料支援的其中一種壓縮類型:DEFLATESNAPPY
      • 在「Cloud Storage URI」文字方塊中,輸入採用 gs://bucket_name/filename.ext 格式的有效 URI,其中 bucket_name 是 Cloud Storage 值區的名稱,filename.ext 則是目的地檔案的名稱和副檔名。BigQuery 資料集與 Cloud Storage 值區必須位於相同的位置
      • 按一下 [OK] (確定) 以匯出資料表。

    當工作在執行時,導覽窗格中該資料表的名稱旁邊會出現「(extracting)」(擷取中)。如要查看工作進度,請在接近導覽窗格頂端的地方尋找「Extract」(擷取) 工作的「Job History」(工作記錄)

    CLI

    請使用 bq extract 指令,並加上 --destination_format 標記。

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

    其他選用的標記包括:

    • --compression:已匯出檔案所用的壓縮類型。
    • --field_delimiter:在採用 CSV 格式的匯出作業輸出檔案中,用來表示不同資料欄之間界線的字元。\ttab 都可用來表示 Tab 字元分隔。
    • --print_header:如果您指定該標記,系統在列印有標頭的格式 (例如 CSV) 時,就會列印標頭列。
    bq --location=location extract \
    --destination_format format \
    --compression compression_type \
    --field_delimiter delimiter \
    --print_header=boolean \
    project_id:dataset.table \
    gs://bucket/filename.ext
    

    其中:

    • location:您所在位置的名稱。--location 是選用標記。舉例來說,如果您在東京地區使用 BigQuery,就可以將該標記的值設定為 asia-northeast1。您可以使用 .bigqueryrc 檔案設定位置的預設值。
    • format:資料匯出格式:CSVNEWLINE_DELIMITED_JSONAVRO
    • compression_type:您選擇的資料格式支援的壓縮類型。CSVNEWLINE_DELIMITED_JSON 支援 GZIP,而 AVRO 支援 DEFLATESNAPPY
    • delimiter:在 CSV 格式的匯出檔案中,用來指定不同資料欄之間界線的字元。\ttab 都是可接受的 Tab 分隔名稱。
    • booleantruefalse。設定為 true 時,如果資料格式支援標頭,系統在列印已匯出資料時就會列印標頭列。預設值為 true
    • project_id:您的專案 ID。
    • dataset:來源資料集的名稱。
    • table:您要匯出的資料表。
    • bucket:資料匯出目標的 Cloud Storage 值區名稱。BigQuery 資料集與 Cloud Storage 值區必須位於相同的位置
    • filename.ext:已匯出資料檔案的名稱和副檔名。您可以使用萬用字元,將資料匯出至多個檔案。

    範例:

    舉例來說,下列指令會把 mydataset.mytable 匯出成名為 myfile.csv 的 gzip 壓縮檔,而 myfile.csv 會儲存在名為 example-bucket 的 Cloud Storage 值區中。

    bq extract \
    --compression GZIP \
    'mydataset.mytable' \
    gs://example-bucket/myfile.csv
    

    預設目的地格式為 CSV。如要匯出成 JSON 或 Avro 格式的檔案,請使用 destination_format 標記,並將該標記的值設定為 NEWLINE_DELIMITED_JSONAVRO。例如:

    bq extract \
    --destination_format NEWLINE_DELIMITED_JSON \
    'mydataset.mytable' \
    gs://example-bucket/myfile.json
    

    下列指令會把 mydataset.mytable 匯出成採用 Snappy 壓縮類型的 Avro 格式檔案,檔案名稱為 myfile.avro。而系統會把 myfile.avro 匯出到名為 example-bucket 的 Cloud Storage 值區。

    bq extract \
    --destination_format AVRO \
    --compression SNAPPY \
    'mydataset.mytable' \
    gs://example-bucket/myfile.avro
    

    API

    如要匯出資料,請建立 extract 工作,並填入工作設定。

    (選用) 請前往工作資源jobReference 區段,並在 location 屬性中指定您的位置。

    1. 建立指向 BigQuery 來源資料與 Cloud Storage 目的地的擷取工作。

    2. 指定來源資料表,方法是使用包含專案 ID、資料集 ID 和資料表 ID 的 sourceTable 設定物件。

    3. destination URI(s) 屬性必須完整的,且採用 gs://bucket/filename.ext 格式。每個 URI 都可以包含一個「*」萬用字元,且它必須出現在值區名稱之後。

    4. 設定 configuration.extract.destinationFormat 屬性以指定資料格式。舉例來說,如要匯出 JSON 檔案,請將這個屬性的值設定為 NEWLINE_DELIMITED_JSON

    5. 如要查看工作狀態,請利用初始要求所傳回的工作 ID 來呼叫 jobs.get(job_id)

      • 如果 status.state = DONE,代表工作已順利完成。
      • 如果出現 status.errorResult 屬性,代表要求執行失敗,且該物件將包含所發生錯誤的相關訊息。
      • 如果沒有出現 status.errorResult,代表工作已順利完成,但過程中可能發生了幾個不嚴重的錯誤。不嚴重的錯誤都會列在已傳回工作物件的 status.errors 屬性中。

    API 附註:

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

    • 針對指定的工作 ID 呼叫 jobs.insert 算是種冪等運算;換句話說,您可以針對同一個工作 ID 重試作業無數次,但在這些作業中最多只會有一個成功。

    C#

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

    
    using Google.Cloud.BigQuery.V2;
    using System;
    
    public class BigQueryExtractTable
    {
        public void ExtractTable(
            string projectId = "your-project-id",
            string bucketName = "your-bucket-name")
        {
            BigQueryClient client = BigQueryClient.Create(projectId);
            // Define a destination URI. Use a single wildcard URI if you think
            // your exported data will be larger than the 1 GB maximum value.
            string destinationUri = $"gs://{bucketName}/shakespeare-*.csv";
            BigQueryJob job = client.CreateExtractJob(
                projectId: "bigquery-public-data",
                datasetId: "samples",
                tableId: "shakespeare",
                destinationUri: destinationUri
            );
            job.PollUntilCompleted();  // Waits for the job to complete.
            Console.Write($"Exported table to {destinationUri}.");
        }
    }

    Go

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

    srcProject := "bigquery-public-data"
    srcDataset := "samples"
    srcTable := "shakespeare"
    
    // For example, gcsUri = "gs://mybucket/shakespeare.csv"
    gcsRef := bigquery.NewGCSReference(gcsURI)
    gcsRef.FieldDelimiter = ","
    
    extractor := client.DatasetInProject(srcProject, srcDataset).Table(srcTable).ExtractorTo(gcsRef)
    extractor.DisableHeader = true
    // You can choose to run the job in a specific location for more complex data locality scenarios.
    // Ex: In this example, source dataset and GCS bucket are in the US.
    extractor.Location = "US"
    
    job, err := extractor.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
    }

    Java

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

    Job job = table.extract(format, gcsUrl);
    // Wait for the job to complete
    try {
      Job completedJob =
          job.waitFor(
              RetryOption.initialRetryDelay(Duration.ofSeconds(1)),
              RetryOption.totalTimeout(Duration.ofMinutes(3)));
      if (completedJob != null && completedJob.getStatus().getError() == null) {
        // Job completed successfully
      } else {
        // Handle error case
      }
    } catch (InterruptedException e) {
      // Handle interrupted wait
    }

    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');
    
    const bigquery = new BigQuery();
    const storage = new Storage();
    
    async function extractTableToGCS() {
      // Exports my_dataset:my_table to gcs://my-bucket/my-file as raw CSV.
    
      /**
       * TODO(developer): Uncomment the following lines before running the sample.
       */
      // const datasetId = "my_dataset";
      // const tableId = "my_table";
      // const bucketName = "my-bucket";
      // const filename = "file.csv";
    
      // Location must match that of the source table.
      const options = {
        location: 'US',
      };
    
      // Export data from the table into a Google Cloud Storage file
      const [job] = await bigquery
        .dataset(datasetId)
        .table(tableId)
        .extract(storage.bucket(bucketName).file(filename), options);
      // 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;
    
    /** Uncomment and populate these variables in your code */
    // $projectId  = 'The Google project ID';
    // $datasetId  = 'The BigQuery dataset ID';
    // $tableId    = 'The BigQuery table ID';
    // $bucketName = 'The Cloud Storage bucket Name';
    
    $bigQuery = new BigQueryClient([
        'projectId' => $projectId,
    ]);
    $dataset = $bigQuery->dataset($datasetId);
    $table = $dataset->table($tableId);
    $destinationUri = "gs://{$bucketName}/{$tableId}.json";
    // Define the format to use. If the format is not specified, 'CSV' will be used.
    $format = 'NEWLINE_DELIMITED_JSON';
    // Create the extract job
    $extractConfig = $table->extract($destinationUri)->destinationFormat($format);
    // Run the job
    $job = $table->runJob($extractConfig);  // Waits for the job to complete
    printf('Exported %s to %s' . PHP_EOL, $table->id(), $destinationUri);

    Python

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

    # from google.cloud import bigquery
    # client = bigquery.Client()
    # bucket_name = 'my-bucket'
    project = "bigquery-public-data"
    dataset_id = "samples"
    table_id = "shakespeare"
    
    destination_uri = "gs://{}/{}".format(bucket_name, "shakespeare.csv")
    dataset_ref = client.dataset(dataset_id, project=project)
    table_ref = dataset_ref.table(table_id)
    
    extract_job = client.extract_table(
        table_ref,
        destination_uri,
        # Location must match that of the source table.
        location="US",
    )  # API request
    extract_job.result()  # Waits for job to complete.
    
    print(
        "Exported {}:{}.{} to {}".format(project, dataset_id, table_id, destination_uri)
    )

    Ruby

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

    require "google/cloud/bigquery"
    
    def extract_table(
        bucket_name = "my-bucket",
        dataset_id  = "my_dataset_id",
        table_id    = "my_table_id"
      )
      bigquery = Google::Cloud::Bigquery.new
      dataset  = bigquery.dataset dataset_id
      table    = dataset.table    table_id
    
      # Define a destination URI. Use a single wildcard URI if you think
      # your exported data will be larger than the 1 GB maximum value.
      destination_uri = "gs://#{bucket_name}/output-*.csv"
    
      extract_job = table.extract_job(destination_uri) do |config|
        # Location must match that of the source table.
        config.location = "US"
      end
      extract_job.wait_until_done!  # Waits for the job to complete
    
      puts "Exported #{table.id} to #{destination_uri}"
    end

    Avro 匯出作業詳細資料

    BigQuery 會透過以下方式產生 Avro 格式的資料:

    • 最後產生的匯出檔案是 Avro 容器檔案。
    • 每個 BigQuery 資料列都代表一筆 Avro 記錄。巢狀資料會以巢狀記錄物件來表示。
    • REQUIRED 欄位代表對應的 Avro 類型。舉例來說,BigQuery 的 INTEGER 類型就會對應到 Avro 的 LONG 類型。
    • NULLABLE 欄位代表 Avro 的對應類型和「空值」的結合。
    • REPEATED 欄位代表 Avro 陣列。
    • TIMESTAMP 資料類型代表 Avro LONG 類型。

    Avro 格式無法與 GZIP 壓縮類型搭配使用。如要壓縮 Avro 資料,請使用 bq 指令列工具或 API,然後指定 Avro 資料支援的其中一種壓縮類型:DEFLATESNAPPY

    將資料匯出為一或多個檔案

    destinationUris 屬性會指出 BigQuery 所匯出檔案的目標位置和檔案名稱。

    BigQuery 支援在每個 URI 中使用一個萬用字元運算子 (*)。該萬用字元可出現在 URI 中的任何位置,但不得做為值區名稱的一部分。當您使用萬用字元運算子時,就會指示 BigQuery 根據您提供的模式建立多個資料分割檔案。萬用字元運算子可被一個能向左填補到 12 位數的數字 (從 0 開始) 取代。舉例來說,某個在檔案名稱結尾處使用萬用字元的 URI,所建立的第一個檔案的名稱結尾會附加 000000000000,而第二個檔案的名稱結尾會附加 000000000001,依此類推。

    下表說明 destinationUris 屬性的幾個可能選項:

    「destinationUris」選項
    單一 URI

    如果您要匯出的資料表資料大小沒有超過 1 GB,請使用單一 URI。這個選項是最常用的情況,因為匯出的資料一般會小於 1 GB 的上限值。

    屬性定義:

    ['gs://my-bucket/file-name.json']

    會建立:

    
    gs://my-bucket/file-name.json
    單一萬用字元 URI

    如果您認為要匯出的資料會超過 1 GB 的上限值,請使用單一萬用字元 URI。BigQuery 會根據您提供的模式,將資料分割為多個檔案。各個已匯出檔案的大小會有所差異。

    如果您在檔案名稱以外的某個 URI 元件中使用萬用字元,請先確認該路徑元件並不存在,再匯出資料。

    屬性定義:

    ['gs://my-bucket/file-name-*.json']

    會建立:

    
    gs://my-bucket/file-name-000000000000.json
    gs://my-bucket/file-name-000000000001.json
    gs://my-bucket/file-name-000000000002.json
    ...
    多個萬用字元 URI

    如果您要分割匯出作業的輸出內容,請使用多個萬用字元 URI。如果您要使用類似 Cloud Dataproc 的服務來執行平行處理工作,請使用這個選項。請確認有多少工作站可用來處理工作,並為每個工作站建立一個 URI。BigQuery 會把每個 URI 位置當做一個分區,並使用平行處理功能,把每個位置的資料分割成多個檔案。假設每個 URI 都有一個萬用字元運算子,讓每個 URI 都不會重複,且 URI 的數量沒有超過配額政策,您就可以在檔案名稱中使用任何您想要的模式。

    當您傳送多個萬用字元 URI 時,BigQuery 會在每個分區的結尾建立一個特殊的檔案,代表檔案組合中的最後一個檔案。而這個檔案名稱會指出 BigQuery 建立了多少個資料分割。

    舉例來說,如果您的萬用字元 URI 是 gs://my-bucket/file- name-<worker number>-*.json,且 BigQuery 建立了 80 個資料分割檔案,則零記錄檔案的名稱就會是 gs://my-bucket/file-name-<worker number>-000000000080.json。這個檔案名稱可讓您用來確認 BigQuery 已經建立了 80 個資料分割檔案 (名為 000000000000 至 000000000079)。

    請注意,零記錄檔案的大小可能會超過 0 位元組,這取決於資料格式,例如當您採用有資料欄標頭的 CSV 格式來匯出資料時,就會發生這種情況。

    字串模式:

    gs://my-bucket/file-name-<worker number>-*.json

    屬性定義:

    
    ['gs://my-bucket/file-name-1-*.json',
    'gs://my-bucket/file-name-2-*.json',
    'gs://my-bucket/file-name-3-*.json']

    會建立:

    下列範例假設 BigQuery 會在每個分區中建立 80 個資料分割檔案。

    
    gs://my-bucket/file-name-1-000000000000.json
    gs://my-bucket/file-name-1-000000000001.json
    ...
    gs://my-bucket/file-name-1-000000000080.json
    gs://my-bucket/file-name-2-000000000000.json
    gs://my-bucket/file-name-2-000000000001.json
    ...
    gs://my-bucket/file-name-2-000000000080.json
    gs://my-bucket/file-name-3-000000000000.json
    gs://my-bucket/file-name-3-000000000001.json
    ...
    gs://my-bucket/file-name-3-000000000080.json

    配額政策

    如需匯出工作配額的相關資訊,請參閱「配額與限制」頁面的匯出工作小節。

    定價

    我們目前不會向您收取從 BigQuery 匯出資料的費用,但匯出作業會受限於 BigQuery 的配額與限制。如要進一步瞭解 BigQuery 的計價方式,請參閱定價頁面。

    當您匯出資料之後,系統會因您在 Cloud Storage 中儲存資料而向您收取費用。如要進一步瞭解 Cloud Storage 的計價方式,請參閱 Cloud Storage 定價頁面。

    後續步驟

本頁內容對您是否有任何幫助?請提供意見:

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

這個網頁