從 Cloud Storage 載入 Parquet 資料

本頁面提供將 Parquet 資料從 Cloud Storage 載入至 BigQuery 的總覽。

Parquet 是 Apache Hadoop 生態系統廣泛使用的開放來源資料欄導向式資料格式。

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

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

如需從本機檔案載入 Parquet 資料的相關資訊,請參閱 將資料從本機資料來源載入至 BigQuery

Parquet 結構定義

將 Parquet 檔案載入至 BigQuery 時,會從自述式來源資料自動擷取資料表結構定義。當 BigQuery 從來源資料擷取結構定義時,會按照字母順序使用最後一個檔案。

舉例來說,Cloud Storage 中有下列 Parquet 檔案:

gs://mybucket/00/
  a.parquet
  z.parquet
gs://mybucket/01/
  b.parquet

這個指令可透過單一 CLI 指令 (以逗號分隔的清單) 載入所有檔案,並從 mybucket/01/b.parquet 擷取結構定義:

bq --location=US load --source_format=PARQUET [DATASET].[TABLE] "gs://mybucket/00/*.parquet","gs://mybucket/01/*.parquet"

載入具有不同結構定義的多個 Parquet 檔案時,多個結構定義中所指定的相同資料欄必須在各個結構定義中採用相同的模式

當 BigQuery 偵測到結構定義時,部分 Parquet 資料類型會轉換為 BigQuery 資料類型,確保與 BigQuery SQL 語法相容。如需詳細資訊,請參閱 Parquet 轉換

Parquet 壓縮

壓縮的 Parquet 檔案未受支援,但壓縮的資料區塊有。對於 Parquet 檔案中的壓縮資料區塊,BigQuery 支援 Snappy、GZip 與 LZO_1X 轉碼器。

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

如要將 Parquet 資料從 Cloud Storage 載入至新的 BigQuery 資料表,或將資料附加至現有資料表:

主控台

  1. 在 GCP 主控台中開啟 BigQuery 網頁版 UI。
    前往 BigQuery 網頁版 UI

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

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

    建立資料表

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

    • 在「Create table from」(使用下列資料建立資料表) 區段,選取您要採用的來源類型。

      建立資料表來源

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

      選取檔案

    • 在「File format」(檔案格式) 中,選取 [Parquet]

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

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

      查看資料集

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

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

  6. 在「Schema」(結構定義) 區段中,您不必採取任何動作。結構定義自述於 Parquet 檔案中。

  7. 在「Advanced options」(進階選項) 區段中選取適合的項目,然後按一下 [Create table] (建立資料表)

傳統版 UI

  • 前往 BigQuery 網頁版 UI。
    前往 BigQuery 網頁版 UI

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

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

    • 在「Location」(位置) 中,選取 [Cloud Storage],然後在「Source」(來源) 欄位輸入 Cloud Storage URI。請注意,您無法在 BigQuery 網頁版 UI 中輸入多個 URI,但可以使用萬用字元。Cloud Storage 值區的位置必須與要建立的表格所在的資料集位置相同。
    • 在「File format」(檔案格式) 中,選取 [Parquet]
  • 在「Create Table」(建立表格) 頁面的「Destination Table」(目的地表格) 區段中:

    • 在「Table name」(表格名稱) 部分選擇適當的資料集,然後在表格名稱欄位中,輸入要在 BigQuery 中建立的表格名稱。
    • 確認「Table type」(資料表類型) 設為 [Native table] (原生資料表)
  • 在「Schema」(結構定義) 區段中,您不必採取任何動作。結構定義自述於 Parquet 檔案中。

  • 按一下 [Create Table] (建立資料表)

  • 指令列

    使用 bq load 指令將 PARQUET 指定為 source_format,並加入一個 Cloud Storage URI。您可以加入單一 URI、逗號分隔的 URI 清單或包含萬用字元的 URI。

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

    bq --location=[LOCATION] load --source_format=[FORMAT] [DATASET].[TABLE] [PATH_TO_SOURCE]
    

    其中:

    • [LOCATION] 是您的位置。--location 是選用標記。例如,如果您在東京地區使用 BigQuery,請將標記的值設為 asia-northeast1。您可以使用 .bigqueryrc 檔案設定位置的預設值。
    • [FORMAT]PARQUET
    • [DATASET] 是現有資料集。
    • [TABLE] 是您正在載入資料的資料表名稱。
    • [PATH_TO_SOURCE] 是完整的 Cloud Storage URI,或是以逗號分隔的 URI 清單。您也可以使用萬用字元

    範例:

    • 下列指令會將 gs://mybucket/mydata.parquet 中的資料載入至 mydataset 中名為 mytable 的資料表。mybucketmydataset 建立於 US 多地區位置。

      bq --location=US load --source_format=PARQUET mydataset.mytable gs://mybucket/mydata.parquet
      
    • 下列指令會將 gs://mybucket/ 中多個檔案的資料載入至 mydataset 中名為 mytable 的資料表。Cloud Storage URI 使用萬用字元。 mybucketmydataset 建立於 US 多地區位置。

      bq --location=US load --source_format=PARQUET mydataset.mytable gs://mybucket/mydata*.parquet
      
    • 下列指令會將 gs://mybucket/ 中多個檔案的資料載入至 mydataset 中名為 mytable 的資料表。指令包含以逗號分隔且帶有萬用字元的 Cloud Storage URI 清單。mybucketmydataset 建立於 asia-northeast1 地區。

      bq --location=asia-northeast1 load --autodetect --source_format=PARQUET mydataset.mytable "gs://mybucket/00/*.parquet","gs://mybucket/01/*.parquet"
      

    API

    設定下列屬性以使用 API 載入 Parquet 資料。

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

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

    3. 來源 URI 必須完整且符合下列格式:gs://[BUCKET]/[OBJECT]。每個 URI 可包含一個「*」萬用字元

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

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

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

    API 附註:

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

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

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

    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.parquet")
    gcsRef.SourceFormat = bigquery.Parquet
    gcsRef.AutoDetect = true
    loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)
    
    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 參考說明文件

    String sourceUri = "gs://cloud-samples-data/bigquery/us-states/us-states.parquet";
    TableId tableId = TableId.of(datasetName, "us_states");
    LoadJobConfiguration configuration =
            LoadJobConfiguration.builder(tableId, sourceUri)
                    .setFormatOptions(FormatOptions.parquet())
                    .build();
    // Load the table
    Job loadJob = bigquery.create(JobInfo.of(configuration));
    loadJob = loadJob.waitFor();
    // Check the table
    StandardTableDefinition destinationTable = bigquery.getTable(tableId).getDefinition();
    System.out.println("State: " + loadJob.getStatus().getState());
    System.out.printf("Loaded %d rows.\n", destinationTable.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');
    
    /**
     * TODO(developer): Uncomment the following lines before running the sample.
     */
    // const datasetId = "my_dataset";
    // const tableId = "my_table";
    
    /**
     * This sample loads the Parquet file at
     * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.parquet
     *
     * TODO(developer): Replace the following lines with the path to your file.
     */
    const bucketName = 'cloud-samples-data';
    const filename = 'bigquery/us-states/us-states.parquet';
    
    async function loadTableGCSParquet() {
      // Imports a GCS file into a table with Parquet source format.
    
      // Instantiate clients
      const bigqueryClient = new BigQuery();
      const storageClient = new Storage();
    
      // Configure the load job. For full list of options, see:
      // https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.load
      const metadata = {
        sourceFormat: 'PARQUET',
        location: 'US',
      };
    
      // Load data from a Google Cloud Storage file into the table
      const [job] = await bigqueryClient
        .dataset(datasetId)
        .table(tableId)
        .load(storageClient.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;
      }
    }
    loadTableGCSParquet();

    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.parquet';
    $loadConfig = $table->loadFromStorage($gcsUri)->sourceFormat('PARQUET');
    $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 啟動載入工作。如要使用 Parquet,請將 LoadJobConfig.source_format 屬性設為 SourceFormat 常數 PARQUET,並將工作設定當成 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.source_format = bigquery.SourceFormat.PARQUET
    uri = "gs://cloud-samples-data/bigquery/us-states/us-states.parquet"
    
    load_job = client.load_table_from_uri(
        uri, dataset_ref.table("us_states"), 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))

    使用 Parquet 資料附加到資料表或覆寫資料表

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

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

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

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

    根據預設,除非更改寫入配置方式,否則載入工作會將資料附加至資料表。如果您想將資料換成載入工作中的資料,可以選擇覆寫 BigQuery 表格中的資料:

    主控台

    1. 在 GCP 主控台中開啟 BigQuery 網頁版 UI。
      前往 BigQuery 網頁版 UI

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

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

      建立資料表

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

      • 在「Create table from」(使用下列資料建立資料表) 區段,選取您要採用的來源類型。

        建立資料表來源

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

        選取檔案

      • 在「File format」(檔案格式) 中,選取 [Parquet]

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

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

        選取資料集

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

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

    6. 在「Schema」(結構定義) 區段中,輸入結構定義

      • 透過以下方式,手動輸入結構定義資訊:

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

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

    7. 在「Advance options」(進階選項) 部分的「Write preference」(寫入偏好設定),選擇 [Write if empty] (空白時寫入)、[Append to table] (附加到表格中) 或是 [Overwrite table] (覆寫資料表)

      覆寫資料表

    8. 按一下 [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」(檔案格式) 中,選取 [Parquet]
    4. 在「Create Table」(建立表格) 頁面的「Destination Table」(目的地表格) 區段中:

      • 在「Table name」(表格名稱) 部分選擇適當的資料集,然後在表格名稱欄位中輸入要附加或覆寫的表格名稱。
      • 確認「Table type」(資料表類型) 設為 [Native table] (原生資料表)
    5. 在「Schema」區段中,無需採取任何行動。結構定義資訊自述於 Parquet 檔案中。

    6. 在「Options」區段的「Write preference」中,選擇 [Write if empty]、[Append to table] 或 [Overwrite table]

      使用新增欄位選項來新增結構定義

    7. 按一下 [Create Table] (建立資料表)

    指令列

    輸入帶有 --replace 標記的 bq load 指令以覆寫資料表。提供 --location 標記,並將值設為您的位置。使用 --noreplace 標記將資料附加至資料表。未指定任何標記時,預設為附加資料。

    bq --location=[LOCATION] load --[no]replace [DATASET].[TABLE] [PATH_TO_SOURCE]
    

    其中:

    • [LOCATION] 是您的位置--location 是選用標記。您可以使用 .bigqueryrc 檔案來設定位置的預設值。
    • [DATASET] 是現有資料集。
    • [TABLE] 是您正在載入資料的資料表名稱。
    • [PATH_TO_SOURCE] 是完整的 Cloud Storage URI,或是以逗號分隔的 URI 清單。您也可以使用萬用字元

    範例:

    • 下列指令會從 gs://mybucket/mydata.parquet 載入資料並覆寫在 mydataset 中名為 mytable 的資料表。mybucketmydataset 建立於 US 多地區位置。

      bq --location=US load --replace --source_format=PARQUET mydataset.mytable gs://mybucket/mydata.parquet
      
    • 下列指令會從 gs://mybucket/mydata.parquet 載入資料並將資料附加至 mydataset 中名為 mytable 的資料表。mybucketmydataset 建立於 asia-northeast1 地區。

      bq --location=asia-northeast1 load --noreplace --source_format=PARQUET mydataset.mytable gs://mybucket/mydata.parquet
      

    API

    設定下列屬性以使用 API 載入 CSV 資料。

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

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

    3. 來源 URI 必須完整且符合下列格式:gs://[BUCKET]/[OBJECT]。您可以使用逗號分隔清單的形式包含多個 URI。請注意,從 Cloud Storage 載入 CSV 資料時,也可以使用萬用字元

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

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

    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.parquet")
    gcsRef.SourceFormat = bigquery.Parquet
    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');
    
    /**
     * TODO(developer): Uncomment the following lines before running the sample.
     */
    // const datasetId = "my_dataset";
    // const tableId = "my_table";
    
    /**
     * This sample loads the CSV file at
     * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.csv
     *
     * TODO(developer): Replace the following lines with the path to your file.
     */
    const bucketName = 'cloud-samples-data';
    const filename = 'bigquery/us-states/us-states.parquet';
    
    async function loadParquetFromGCSTruncate() {
      /**
       * Imports a GCS file into a table and overwrites
       * table data if table already exists.
       */
    
      // Instantiate clients
      const bigqueryClient = new BigQuery();
      const storageClient = new Storage();
    
      // Configure the load job. For full list of options, see:
      // https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.load
      const metadata = {
        sourceFormat: 'PARQUET',
        // Set the write disposition to overwrite existing table data.
        writeDisposition: 'WRITE_TRUNCATE',
        location: 'US',
      };
    
      // Load data from a Google Cloud Storage file into the table
      const [job] = await bigqueryClient
        .dataset(datasetId)
        .table(tableId)
        .load(storageClient.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;
      }
    }
    loadParquetFromGCSTruncate();

    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.parquet';
    $loadConfig = $table->loadFromStorage($gcsUri)->sourceFormat('PARQUET')->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

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

    如果要取代現有資料表中的資料列,請將 LoadJobConfig.write_disposition 屬性設為 WriteDisposition 常數 WRITE_TRUNCATE

    # 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.PARQUET
    uri = "gs://cloud-samples-data/bigquery/us-states/us-states.parquet"
    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))

    Parquet 轉換

    BigQuery 會將 Parquet 資料類型轉換為下列 BigQuery 資料類型:

    類型轉換

    Parquet 類型 Parquet 轉換類型 BigQuery 資料類型
    BOOLEAN NONE Boolean
    INT32 NONE、UINT_8、UINT_16、UINT_32、INT_8、INT_16、INT_32 Integer
    INT32 DECIMAL (請參閱 DECIMAL 註解) Numeric
    INT32 DATE Date
    INT64 NONE、UINT_64、INT_64 Integer
    INT64 DECIMAL (請參閱 DECIMAL 註解) Numeric
    INT64 TIMESTAMP_MILLIS Timestamp
    INT64 TIMESTAMP_MICROS Timestamp
    INT96 NONE Timestamp
    FLOAT NONE Floating point
    DOUBLE NONE Floating point
    BYTE_ARRAY NONE Bytes
    BYTE_ARRAY UTF8 String
    FIXED_LEN_BYTE_ARRAY DECIMAL (請參閱 DECIMAL 註解) Numeric
    FIXED_LEN_BYTE_ARRAY NONE Bytes

    系統不支援其他 Parquet 類型與轉換類型的組合。

    Decimal 註解

    附有 DECIMAL 註解的 Parquet 類型準確度最高可達 38 (總位數),且小數位數最多可以是 9 (小數點右邊的位數)。整數位數 (即總位數減去小數位數) 最多可以是 29。例如,系統支援 DECIMAL(38, 9),因為總位數是 38 而小數位數是 9 (在本例中,整數位數的值是 29)。系統不支援 DECIMAL(38, 5),因為總位數是 38 而小數位數是 5 (在本例中,整數位數的值是 33)。

    資料欄名稱轉換

    資料欄名稱僅可包含字母 (a-z、A-Z)、數字 (0-9) 或底線 (_),且必須以字母或底線作為開頭。資料欄名稱的長度上限為 128 個字元。資料欄名稱不得使用以下任何一個前置字元:

    • _TABLE_
    • _FILE_
    • _PARTITION

    資料欄名稱不得重複,即便其情況不同也是如此。例如,名為 Column1 的資料欄名稱會被視為與名為 column1 的資料欄相同。

    就目前而言,您無法載入資料欄名稱帶有句號 (.) 之資料欄的 Parquet 檔案。

    如果 Parquet 資料欄名稱包含其他字元 (句號除外),則會以底線取代這些字元。可在資料欄名稱的結尾處加上底線以避免發生衝突。例如,如果 Parquet 檔案包含 Column1column1 這 2 個資料欄,則資料欄會分別做為 Column1column1_ 載入。

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

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

    這個網頁