為 Cloud Storage 建立 BigLake 外部資料表

本文說明如何建立 Cloud Storage BigLake 資料表。BigLake 資料表可讓您使用存取權委派功能,查詢 Cloud Storage 中的結構化資料。存取權委派功能可將 BigLake 資料表的存取權,與基礎資料儲存空間的存取權分離開來。

事前準備

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery Connection API.

    Enable the API

    如要從 Apache Spark 等開放原始碼引擎讀取 BigLake 資料表,請啟用 BigQuery Storage Read API

  4. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  5. 確認您有 BigQuery 資料集

  6. 確認 Google Cloud SDK 版本為 366.0.0 以上:

    gcloud version
    

    視需要更新 Google Cloud SDK

    1. 選用:如果是 Terraform,則必須使用 terraform-provider-google 4.25.0 以上版本。terraform-provider-google 版本列於 GitHub。您可以從 HashiCorp Terraform 下載頁面下載最新版本的 Terraform。
  7. 建立 Cloud 資源連線,或設定與外部資料來源的預設連線。如要建立連線,必須具備其他角色和權限。詳情請參閱「建立 Cloud 資源連線」和「預設連線總覽」。

  8. 必要的角色

    如要建立 BigLake 資料表,您需要下列 BigQuery 身分與存取權管理 (IAM) 權限:

    • bigquery.tables.create
    • bigquery.connections.delegate

    BigQuery 管理員 (roles/bigquery.admin) 預先定義的 Identity and Access Management 角色包含這些權限。

    如果您不是這個角色的主體,請要求管理員授予存取權或為您建立 BigLake 資料表。

    如要進一步瞭解 BigQuery 中的 Identity and Access Management 角色和權限,請參閱預先定義的角色和權限

    位置注意事項

    使用 Cloud Storage 儲存資料檔案時,建議使用 Cloud Storage 單一區域雙區域 bucket,不要使用多區域 bucket,這樣可以提升效能。

    根據未分區資料建立 BigLake 資料表

    如果您知道如何在 BigQuery 建立資料表,建立 BigLake 資料表的程序也差不多。資料表可使用 BigLake 支援的任何檔案格式。詳情請參閱「限制」一節。

    建立 BigLake 資料表前,您需要資料集存取 Cloud Storage 的 Cloud 資源連線。

    如要建立 BigLake 資料表,請選取下列任一選項:

    主控台

    1. 前往「BigQuery」頁面

      前往「BigQuery」

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

    3. 展開「動作」選項,然後按一下「建立資料表」

    4. 在「來源」部分,指定下列詳細資料:

      1. 在「Create table from」(使用下列資料建立資料表) 區段,選取「Google Cloud Storage」

      2. 如要「從 GCS bucket 選取檔案或使用 URI 模式」,請瀏覽並選取要使用的 bucket 和檔案,或按照 gs://bucket_name/[folder_name/]file_name 格式輸入路徑。

        您無法在 Google Cloud 控制台中指定多個 URI,但可以指定一個星號 (*) 萬用字元,選取多個檔案。例如 gs://mybucket/file_name*。詳情請參閱「Cloud Storage URI 的萬用字元支援」。

        Cloud Storage 值區的位置必須與要建立的表格所在的資料集位置相同。

      3. 在「File format」(檔案格式) 部分,選取與檔案相符的格式。

    5. 在「目的地」部分,指定下列詳細資料:

      1. 在「Project」(專案) 部分,選擇要在其中建立資料表的專案。

      2. 在「Dataset」(資料集) 部分,選擇要建立資料表的資料集。

      3. 在「Table」(資料表) 中,輸入要建立的資料表名稱。

      4. 在「Table type」(資料表類型) 中,選取「External table」(外部資料表)

      5. 選取「使用 Cloud 資源連線建立 BigLake 資料表」

      6. 在「連線 ID」專區中,選取您先前建立的連線。

    6. 在「Schema」(結構定義) 區段中,您可以啟用結構定義自動偵測功能,也可以在有來源檔案時手動指定結構定義。如果沒有來源檔案,就必須手動指定結構定義。

      • 如要啟用結構定義自動偵測功能,請選取「Auto-detect」(自動偵測) 選項。

      • 如要手動指定結構定義,請取消勾選「自動偵測」選項。啟用「以文字形式編輯」,然後以 JSON 陣列的形式輸入資料表結構定義。

    7. 如要忽略含有與結構定義不符之額外資料欄值的資料列,請展開「進階選項」部分,然後選取「不明的值」

    8. 點選「建立資料表」。

    建立永久資料表後,您就可以把這個資料表當做原生 BigQuery 資料表一樣執行查詢。查詢完成後,可以將結果匯出為 CSV 或 JSON 檔案、將結果儲存為資料表,或將結果儲存至 Google 試算表。

    SQL

    使用 CREATE EXTERNAL TABLE DDL 陳述式。您可以明確指定結構定義,也可以使用結構定義自動偵測功能,從外部資料推斷結構定義。

    1. 前往 Google Cloud 控制台的「BigQuery」頁面。

      前往「BigQuery」

    2. 在查詢編輯器中輸入下列陳述式:

      CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME`
        WITH CONNECTION {`PROJECT_ID.REGION.CONNECTION_ID` | DEFAULT}
        OPTIONS (
          format ="TABLE_FORMAT",
          uris = ['BUCKET_PATH'[,...]],
          max_staleness = STALENESS_INTERVAL,
          metadata_cache_mode = 'CACHE_MODE'
          );

      取代下列項目:

      • PROJECT_ID:要在其中建立資料表的專案名稱,例如 myproject
      • DATASET:您要在其中建立資料表的 BigQuery 資料集名稱,例如 mydataset
      • EXTERNAL_TABLE_NAME:要建立的資料表名稱,例如 mytable
      • REGION:包含連線的區域,例如 us
      • CONNECTION_ID:連線 ID,例如 myconnection

        在 Google Cloud 控制台中 查看連線詳細資料時,連線 ID 是「連線 ID」中顯示的完整連線 ID 最後一部分的值,例如 projects/myproject/locations/connection_location/connections/myconnection

        如要使用 預設連線,請指定 DEFAULT,而非包含 PROJECT_ID.REGION.CONNECTION_ID 的連線字串。

      • TABLE_FORMAT:要建立的表格格式,例如 PARQUET

        如要進一步瞭解支援的格式,請參閱「限制」一節。

      • BUCKET_PATH:Cloud Storage 值區的路徑,其中包含外部資料表的資料,格式為 ['gs://bucket_name/[folder_name/]file_name']

        如要在路徑中指定一個星號 (*) 萬用字元,即可從值區選取多個檔案。例如,['gs://mybucket/file_name*']。詳情請參閱「Cloud Storage URI 的萬用字元支援」。

        如要為 uris 選項指定多個值區,請提供多個路徑。

        以下範例顯示有效的 uris 值:

        • ['gs://bucket/path1/myfile.csv']
        • ['gs://bucket/path1/*.csv']
        • ['gs://bucket/path1/*', 'gs://bucket/path2/file00*']

        指定以多個檔案為目標的 uris 值時,所有檔案都必須共用相容的結構定義。

        如要進一步瞭解如何在 BigQuery 中使用 Cloud Storage URI,請參閱「Cloud Storage 資源路徑」。

      • STALENESS_INTERVAL:指定對 BigLake 資料表執行的作業是否使用快取中繼資料,以及快取中繼資料必須有多新,作業才能使用。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。

        如要停用中繼資料快取功能,請指定 0。這是目前的預設做法。

        如要啟用中繼資料快取功能,請指定介於 30 分鐘至 7 天之間的間隔常值。舉例來說,如要指定 4 小時的過時間隔,請輸入 INTERVAL 4 HOUR。如果資料表的中繼資料在過去 4 小時內重新整理過,針對資料表執行的作業就會使用這個值,如果快取中繼資料的建立時間早於該時間,作業會改為從 Cloud Storage 擷取中繼資料。

      • CACHE_MODE:指定中繼資料快取是否自動或手動重新整理。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。

        設為 AUTOMATIC,中繼資料快取就會以系統定義的時間間隔 (通常為 30 到 60 分鐘) 重新整理。

        如要依您決定的時間表重新整理中繼資料快取,請設為 MANUAL。在這種情況下,您可以呼叫 BQ.REFRESH_EXTERNAL_METADATA_CACHE 系統程序來重新整理快取。

        如果 STALENESS_INTERVAL 設為大於 0 的值,您就必須設定 CACHE_MODE

    3. 按一下「執行」

    如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。

    bq

    選項 1:資料表定義檔

    使用 bq mkdef 指令建立資料表定義檔,然後將路徑傳遞至 bq mk 指令,如下所示:

    bq mkdef \
        --connection_id=CONNECTION_ID \
        --source_format=SOURCE_FORMAT \
      BUCKET_PATH > DEFINITION_FILE
    
    bq mk --table \
        --external_table_definition=DEFINITION_FILE \
        --max_staleness=STALENESS_INTERVAL \
        PROJECT_ID:DATASET.EXTERNAL_TABLE_NAME \
        SCHEMA

    更改下列內容:

    • CONNECTION_ID:連線 ID,例如 myconnection

      在 Google Cloud 控制台中查看連線詳細資料時,連線 ID 是「連線 ID」中顯示的完整連線 ID 最後一個區段的值,例如 projects/myproject/locations/connection_location/connections/myconnection

      如要使用預設連線,請指定 DEFAULT,而非包含 PROJECT_ID.REGION.CONNECTION_ID 的連線字串。

    • SOURCE_FORMAT:外部資料來源的格式。例如:PARQUET

    • BUCKET_PATH:Cloud Storage bucket 的路徑,其中包含表格的資料,格式為 gs://bucket_name/[folder_name/]file_pattern

      如要在 file_pattern 中選取 bucket 中的多個檔案,請在 file_pattern 中指定一個星號 (*) 萬用字元。例如 gs://mybucket/file00*.parquet。詳情請參閱「Cloud Storage URI 的萬用字元支援」。

      如要為 uris 選項指定多個值區,請提供多個路徑。

      以下範例顯示有效的 uris 值:

      • gs://bucket/path1/myfile.csv
      • gs://bucket/path1/*.parquet
      • gs://bucket/path1/file1*gs://bucket1/path1/*

      指定以多個檔案為目標的 uris 值時,所有檔案都必須共用相容的結構定義。

      如要進一步瞭解如何在 BigQuery 中使用 Cloud Storage URI,請參閱「Cloud Storage 資源路徑」。

    • DEFINITION_FILE:本機上資料表定義檔的路徑。

    • STALENESS_INTERVAL:指定對 BigLake 資料表執行的作業是否使用快取中繼資料,以及快取中繼資料必須有多新,作業才能使用。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。

      如要停用中繼資料快取功能,請指定 0。這是目前的預設做法。

      如要啟用中繼資料快取,請使用INTERVAL 資料類型文件所述的 Y-M D H:M:S 格式,指定 30 分鐘到 7 天之間的間隔值。舉例來說,如要指定 4 小時的過時間隔,請輸入 0-0 0 4:0:0。如果資料表在過去 4 小時內重新整理過,針對資料表執行的作業就會使用快取中繼資料。如果快取中繼資料較舊,作業會改為從 Cloud Storage 擷取中繼資料。

    • DATASET:您要在其中建立資料表的 BigQuery 資料集名稱,例如 mydataset

    • EXTERNAL_TABLE_NAME:要建立的資料表名稱,例如 mytable

    • SCHEMA:BigLake 資料表的結構定義

    範例:

    bq mkdef
        --connection_id=myconnection
        --metadata_cache_mode=CACHE_MODE
        --source_format=CSV 'gs://mybucket/*.csv' > mytable_def
    
    bq mk
        --table
        --external_table_definition=mytable_def='gs://mybucket/*.csv'
        --max_staleness=0-0 0 4:0:0
        myproject:mydataset.mybiglaketable
        Region:STRING,Quarter:STRING,Total_sales:INTEGER

    如要使用結構定義自動偵測功能,請在 mkdef 指令中設定 --autodetect=true 標記,並省略結構定義:

    bq mkdef \
        --connection_id=myconnection \
        --metadata_cache_mode=CACHE_MODE \
        --source_format=CSV --autodetect=true \
        gs://mybucket/*.csv > mytable_def
    
    bq mk \
        --table \
        --external_table_definition=mytable_def=gs://mybucket/*.csv \
        --max_staleness=0-0 0 4:0:0 \
        myproject:mydataset.myexternaltable

    選項 2:內嵌表格定義

    您可以直接將資料表定義傳遞至 bq mk 指令,不必建立資料表定義檔。使用 @connection 裝飾器,在 --external_table_definition 旗標結尾指定要使用的連線。

    bq mk --table \
      --external_table_definition=@SOURCE_FORMAT=BUCKET_PATH@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \
      DATASET_NAME.TABLE_NAME \
      SCHEMA

    更改下列內容:

    • SOURCE_FORMAT:外部資料來源的格式

      例如 CSV

    • BUCKET_PATH:Cloud Storage bucket 的路徑,其中包含表格的資料,格式為 gs://bucket_name/[folder_name/]file_pattern

      如要在 file_pattern 中選取 bucket 中的多個檔案,請在 file_pattern 中指定一個星號 (*) 萬用字元。例如 gs://mybucket/file00*.parquet。詳情請參閱「Cloud Storage URI 的萬用字元支援」。

      如要為 uris 選項指定多個值區,請提供多個路徑。

      以下範例顯示有效的 uris 值:

      • gs://bucket/path1/myfile.csv
      • gs://bucket/path1/*.parquet
      • gs://bucket/path1/file1*gs://bucket1/path1/*

      指定以多個檔案為目標的 uris 值時,所有檔案都必須共用相容的結構定義。

      如要進一步瞭解如何在 BigQuery 中使用 Cloud Storage URI,請參閱「Cloud Storage 資源路徑」。

    • PROJECT_ID:要在其中建立資料表的專案名稱,例如 myproject

    • REGION:包含連線的區域,us

    • CONNECTION_ID:連線 ID,例如 myconnection

      在 Google Cloud 控制台中查看連線詳細資料時,連線 ID 是「連線 ID」中顯示的完整連線 ID 最後一個區段的值,例如 projects/myproject/locations/connection_location/connections/myconnection

      如要使用預設連線,請指定 DEFAULT,而非包含 PROJECT_ID.REGION.CONNECTION_ID 的連線字串。

    • DATASET_NAME:要在其中建立 BigLake 資料集的資料集名稱

    • TABLE_NAME:BigLake 資料表的名稱

    • SCHEMA:BigLake 資料表的結構定義

    範例:

    bq mk --table \
        --external_table_definition=@CSV=gs://mybucket/*.parquet@projects/myproject/locations/us/connections/myconnection \
        --max_staleness=0-0 0 4:0:0 \
        myproject:mydataset.myexternaltable \
        Region:STRING,Quarter:STRING,Total_sales:INTEGER
    

    API

    呼叫 tables.insert 方法 API 方法,並在您傳入的 Table 資源中建立 ExternalDataConfiguration

    指定 schema 屬性,或將 autodetect 屬性設為 true,為支援的資料來源啟用結構定義自動偵測功能。

    指定 connectionId 屬性,找出要用於連線至 Cloud Storage 的連線。

    Terraform

    這個範例會根據未經分割的資料建立 BigLake 資料表。

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

    # This creates a bucket in the US region named "my-bucket" with a pseudorandom suffix.
    resource "random_id" "default" {
      byte_length = 8
    }
    resource "google_storage_bucket" "default" {
      name                        = "my-bucket-${random_id.default.hex}"
      location                    = "US"
      force_destroy               = true
      uniform_bucket_level_access = true
    }
    
    # This queries the provider for project information.
    data "google_project" "project" {}
    
    # This creates a connection in the US region named "my-connection".
    # This connection is used to access the bucket.
    resource "google_bigquery_connection" "default" {
      connection_id = "my-connection"
      location      = "US"
      cloud_resource {}
    }
    
    # This grants the previous connection IAM role access to the bucket.
    resource "google_project_iam_member" "default" {
      role    = "roles/storage.objectViewer"
      project = data.google_project.project.id
      member  = "serviceAccount:${google_bigquery_connection.default.cloud_resource[0].service_account_id}"
    }
    
    # This makes the script wait for seven minutes before proceeding.
    # This lets IAM permissions propagate.
    resource "time_sleep" "default" {
      create_duration = "7m"
    
      depends_on = [google_project_iam_member.default]
    }
    
    # This defines a Google BigQuery dataset with
    # default expiration times for partitions and tables, a
    # description, a location, and a maximum time travel.
    resource "google_bigquery_dataset" "default" {
      dataset_id                      = "my_dataset"
      default_partition_expiration_ms = 2592000000  # 30 days
      default_table_expiration_ms     = 31536000000 # 365 days
      description                     = "My dataset description"
      location                        = "US"
      max_time_travel_hours           = 96 # 4 days
    
      # This defines a map of labels for the bucket resource,
      # including the labels "billing_group" and "pii".
      labels = {
        billing_group = "accounting",
        pii           = "sensitive"
      }
    }
    
    
    # This creates a BigQuery Table with automatic metadata caching.
    resource "google_bigquery_table" "default" {
      dataset_id = google_bigquery_dataset.default.dataset_id
      table_id   = "my_table"
      schema = jsonencode([
        { "name" : "country", "type" : "STRING" },
        { "name" : "product", "type" : "STRING" },
        { "name" : "price", "type" : "INT64" }
      ])
      external_data_configuration {
        # This defines an external data configuration for the BigQuery table
        # that reads Parquet data from the publish directory of the default
        # Google Cloud Storage bucket.
        autodetect    = false
        source_format = "PARQUET"
        connection_id = google_bigquery_connection.default.name
        source_uris   = ["gs://${google_storage_bucket.default.name}/data/*"]
        # This enables automatic metadata refresh.
        metadata_cache_mode = "AUTOMATIC"
      }
    
      # This sets the maximum staleness of the metadata cache to 10 hours.
      max_staleness = "0-0 0 10:0:0"
    
      deletion_protection = false
    
      depends_on = [time_sleep.default]
    }

    如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。

    準備 Cloud Shell

    1. 啟動 Cloud Shell
    2. 設定要套用 Terraform 設定的預設 Google Cloud 專案。

      每項專案只需要執行一次這個指令,且可以在任何目錄中執行。

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      如果您在 Terraform 設定檔中設定明確值,環境變數就會遭到覆寫。

    準備目錄

    每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。

    1. Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱的副檔名必須是 .tf,例如 main.tf。在本教學課程中,這個檔案稱為 main.tf
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. 如果您正在學習教學課程,可以複製每個章節或步驟中的範例程式碼。

      將範例程式碼複製到新建立的 main.tf

      視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您使用這個方法。

    3. 查看並修改範例參數,套用至您的環境。
    4. 儲存變更。
    5. 初始化 Terraform。每個目錄只需執行一次這項操作。
      terraform init

      如要使用最新版 Google 供應商,請加入 -upgrade 選項:

      terraform init -upgrade

    套用變更

    1. 檢查設定,確認 Terraform 即將建立或更新的資源符合您的預期:
      terraform plan

      視需要修正設定。

    2. 執行下列指令,並在提示中輸入 yes,即可套用 Terraform 設定:
      terraform apply

      等待 Terraform 顯示「Apply complete!」訊息。

    3. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

    BigLake 支援自動偵測結構定義。不過,如果您未提供結構定義,且上個步驟中未將存取權授予服務帳戶,當您嘗試自動偵測結構定義時,這些步驟將會失敗,並顯示存取遭拒的訊息。

    在 Apache Hive 分區資料上建立 BigLake 資料表

    您可以為 Cloud Storage 中的 Hive 分區資料建立 BigLake 資料表。建立外部分區資料表後,您就無法變更分區鍵。如要變更分割區鍵,您必須重新建立資料表。

    如要根據 Cloud Storage 中的 Hive 分區資料建立 BigLake 資料表,請選取下列任一選項:

    主控台

    1. 前往「BigQuery」頁面

      前往「BigQuery」

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

    3. 按一下「查看動作」,然後按一下「建立資料表」。系統會開啟「建立資料表」窗格。

    4. 在「來源」部分,指定下列詳細資料:

      1. 在「Create table from」(使用下列資料建立資料表) 部分,選取「Google Cloud Storage」

      2. 使用萬用字元提供資料夾路徑。例如:my_bucket/my_files*。資料夾的位置必須與要建立、附加或覆寫的資料表所在的資料集位置相同。

      3. 從「檔案格式」清單中選取檔案類型。

      4. 選取「來源資料分割」核取方塊,然後指定下列詳細資料:

        1. 在「選取來源 URI 前置字串」中,輸入 URI 前置字串。例如:gs://my_bucket/my_files
        2. 選用:如要對這個資料表的所有查詢強制使用分區篩選器,請選取「需要分區篩選器」核取方塊。 使用分區篩選器可以降低成本並提升效能。詳情請參閱在查詢中對分區鍵套用述詞篩選器
        3. 在「分割區推論模式」部分,選取下列其中一個選項:

          • 自動推論類型:將分區結構定義偵測模式設為 AUTO
          • 將所有資料欄視為字串:將分區結構定義偵測模式設為 STRINGS
          • 提供自己的結構定義:將分區結構定義偵測模式設為 CUSTOM,然後手動輸入分區鍵的結構定義資訊。詳情請參閱「提供自訂分區索引鍵結構定義」。
    5. 在「目的地」部分,指定下列詳細資料:

      1. 在「Project」(專案) 部分,選取要在其中建立資料表的專案。
      2. 在「Dataset」(資料集) 部分,選取要建立資料表的資料集。
      3. 在「Table」(資料表) 中,輸入要建立的資料表名稱。
      4. 在「Table type」(資料表類型) 中,選取「External table」(外部資料表)
      5. 勾選「使用 Cloud 資源連線建立 BigLake 資料表」核取方塊
      6. 在「連線 ID」部分,選取您先前建立的連線。
    6. 在「Schema」(結構定義) 區段中,選取「Auto detect」(自動偵測) 選項,啟用結構定義自動偵測功能。

    7. 如要忽略含有與結構定義不符之額外資料欄值的資料列,請展開「進階選項」部分,然後選取「不明的值」

    8. 點選「建立資料表」。

    SQL

    使用 CREATE EXTERNAL TABLE DDL 陳述式

    1. 前往 Google Cloud 控制台的「BigQuery」頁面。

      前往「BigQuery」

    2. 在查詢編輯器中輸入下列陳述式:

      CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME`
      WITH PARTITION COLUMNS
      (
        PARTITION_COLUMN PARTITION_COLUMN_TYPE,
      )
      WITH CONNECTION {`PROJECT_ID.REGION.CONNECTION_ID` | DEFAULT}
      OPTIONS (
        hive_partition_uri_prefix = "HIVE_PARTITION_URI_PREFIX",
        uris=['FILE_PATH'],
        max_staleness = STALENESS_INTERVAL,
        metadata_cache_mode = 'CACHE_MODE',
        format ="TABLE_FORMAT"
      );

      取代下列項目:

      • PROJECT_ID:要在其中建立資料表的專案名稱,例如 myproject
      • DATASET:您要在其中建立資料表的 BigQuery 資料集名稱,例如 mydataset
      • EXTERNAL_TABLE_NAME:要建立的資料表名稱,例如 mytable
      • PARTITION_COLUMN:分區資料欄的名稱
      • PARTITION_COLUMN_TYPE:分區欄的類型
      • REGION:包含連線的區域,例如 us
      • CONNECTION_ID:連線 ID,例如 myconnection

        在 Google Cloud 控制台中查看連線詳細資料時,連線 ID 是「連線 ID」中顯示的完整連線 ID 最後一個區段的值,例如 projects/myproject/locations/connection_location/connections/myconnection

        如要使用 預設連線,請指定 DEFAULT,而不是包含 PROJECT_ID.REGION.CONNECTION_ID 的連線字串。

      • HIVE_PARTITION_URI_PREFIX:Hive 分區 URI 前置字元,例如 gs://mybucket/
      • FILE_PATH:要建立的外部資料表資料來源路徑,例如 gs://mybucket/*.parquet
      • STALENESS_INTERVAL:指定對 BigLake 資料表執行的作業是否使用快取中繼資料,以及快取中繼資料必須有多新,作業才能使用。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。

        如要停用中繼資料快取功能,請指定 0。這是目前的預設做法。

        如要啟用中繼資料快取功能,請指定介於 30 分鐘至 7 天之間的間隔常值。舉例來說,如要指定 4 小時的過時間隔,請輸入 INTERVAL 4 HOUR。如果資料表的中繼資料在過去 4 小時內重新整理過,針對資料表執行的作業就會使用這個值,如果快取中繼資料的建立時間早於該時間,作業會改為從 Cloud Storage 擷取中繼資料。

      • CACHE_MODE:指定中繼資料快取是否自動或手動重新整理。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。

        設為 AUTOMATIC,中繼資料快取就會以系統定義的時間間隔 (通常為 30 到 60 分鐘) 重新整理。

        如要依您決定的時間表重新整理中繼資料快取,請設為 MANUAL。在這種情況下,您可以呼叫 BQ.REFRESH_EXTERNAL_METADATA_CACHE 系統程序來重新整理快取。

        如果 STALENESS_INTERVAL 設為大於 0 的值,您就必須設定 CACHE_MODE

      • TABLE_FORMAT:要建立的資料表格式,例如 PARQUET

    3. 按一下「執行」

    如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。

    範例

    下列範例會根據分區資料建立 BigLake 資料表,其中:

    • 結構定義由系統自動偵測。
    • 資料表的中繼資料快取過時間隔為 1 天。
    • 中繼資料快取會自動重新整理。
    CREATE EXTERNAL TABLE `my_dataset.my_table`
    WITH PARTITION COLUMNS
    (
      sku STRING,
    )
    WITH CONNECTION `us.my-connection`
    OPTIONS(
      hive_partition_uri_prefix = "gs://mybucket/products",
      uris = ['gs://mybucket/products/*'],
      max_staleness = INTERVAL 1 DAY,
      metadata_cache_mode = 'AUTOMATIC'
    );

    下列範例會根據分區資料建立 BigLake 資料表,其中:

    • 已指定結構定義。
    • 資料表的中繼資料快取過時間隔為 8 小時。
    • 中繼資料快取必須手動重新整理。
    CREATE EXTERNAL TABLE `my_dataset.my_table`
    (
      ProductId INTEGER,
      ProductName STRING,
      ProductType STRING
    )
    WITH PARTITION COLUMNS
    (
      sku STRING,
    )
    WITH CONNECTION `us.my-connection`
    OPTIONS(
      hive_partition_uri_prefix = "gs://mybucket/products",
      uris = ['gs://mybucket/products/*'],
      max_staleness = INTERVAL 8 HOUR,
      metadata_cache_mode = 'MANUAL'
    );

    bq

    首先,請使用 bq mkdef 指令建立資料表定義檔:

    bq mkdef \
    --source_format=SOURCE_FORMAT \
    --connection_id=REGION.CONNECTION_ID \
    --hive_partitioning_mode=PARTITIONING_MODE \
    --hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX \
    --require_hive_partition_filter=BOOLEAN \
    --metadata_cache_mode=CACHE_MODE \
     GCS_URIS > DEFINITION_FILE

    更改下列內容:

    • SOURCE_FORMAT:外部資料來源的格式。例如:CSV
    • REGION:包含連線的區域,例如 us
    • CONNECTION_ID:連線 ID,例如 myconnection

      在 Google Cloud 控制台中查看連線詳細資料時,連線 ID 是「連線 ID」中顯示的完整連線 ID 最後一個區段的值,例如 projects/myproject/locations/connection_location/connections/myconnection

      如要使用預設連線,請指定 DEFAULT,而非包含 PROJECT_ID.REGION.CONNECTION_ID 的連線字串。

    • PARTITIONING_MODE:Hive 分區模式。請使用下列其中一個值:

      • AUTO:自動偵測索引鍵名稱和類型。
      • STRINGS:自動將鍵名轉換為字串。
      • CUSTOM:在來源 URI 前置字串中編碼索引鍵結構定義。
    • GCS_URI_SHARED_PREFIX:來源 URI 前置字串。

    • BOOLEAN:指定是否要在查詢時要求述詞篩選器。這個標記是選用的,預設值為 false

    • CACHE_MODE:指定中繼資料快取是否自動或手動重新整理。如果您也打算在後續的 bq mk 指令中使用 --max_staleness 標記來啟用中繼資料快取,才需要加入這個標記。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。

      設為 AUTOMATIC,中繼資料快取就會以系統定義的時間間隔 (通常介於 30 到 60 分鐘之間) 重新整理。

      如要依您決定的時間表重新整理中繼資料快取,請設為 MANUAL。在這種情況下,您可以呼叫BQ.REFRESH_EXTERNAL_METADATA_CACHE系統程序來重新整理快取。

      如果 STALENESS_INTERVAL 設為大於 0 的值,您就必須設定 CACHE_MODE

    • GCS_URIS:Cloud Storage 資料夾的路徑,使用萬用字元格式。

    • DEFINITION_FILE:本機電腦上資料表定義檔的路徑。

    如果 PARTITIONING_MODECUSTOM,請在來源 URI 前置字串中加入分區索引鍵結構定義,格式如下:

    --hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX/{KEY1:TYPE1}/{KEY2:TYPE2}/...

    建立資料表定義檔後,請使用 bq mk 指令建立 BigLake 資料表:

    bq mk --external_table_definition=DEFINITION_FILE \
    --max_staleness=STALENESS_INTERVAL \
    DATASET_NAME.TABLE_NAME \
    SCHEMA

    更改下列內容:

    • DEFINITION_FILE:資料表定義檔的路徑。
    • STALENESS_INTERVAL:指定對 BigLake 資料表執行的作業是否使用快取中繼資料,以及快取中繼資料必須有多新,作業才能使用。如要使用此旗標,您必須在先前的 bq mkdef 指令中,為 --metadata_cache_mode 旗標指定值。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。

      如要停用中繼資料快取功能,請指定 0。這是目前的預設做法。

      如要啟用中繼資料快取,請使用INTERVAL 資料類型文件所述的 Y-M D H:M:S 格式,指定 30 分鐘到 7 天之間的時間間隔值。舉例來說,如要指定 4 小時的過時間隔,請輸入 0-0 0 4:0:0。如果資料表的中繼資料在過去 4 小時內重新整理過,針對資料表執行的作業就會使用這個值,如果快取中繼資料的建立時間早於該時間,作業會改為從 Cloud Storage 擷取中繼資料。

    • DATASET_NAME:包含資料表的資料集名稱。

    • TABLE_NAME:您要建立的資料表名稱。

    • SCHEMA:指定 JSON 結構定義檔的路徑,或以 field:data_type,field:data_type,... 形式指定結構定義。如要使用結構定義自動偵測功能,請省略這個引數。

    範例

    下列範例使用 AUTO Hive 分割模式,並將中繼資料快取設為 12 小時的過時間隔,且會自動重新整理:

    bq mkdef --source_format=CSV \
      --connection_id=us.my-connection \
      --hive_partitioning_mode=AUTO \
      --hive_partitioning_source_uri_prefix=gs://myBucket/myTable \
      --metadata_cache_mode=AUTOMATIC \
      gs://myBucket/myTable/* > mytable_def
    
    bq mk --external_table_definition=mytable_def \
      --max_staleness=0-0 0 12:0:0 \
      mydataset.mytable \
      Region:STRING,Quarter:STRING,Total_sales:INTEGER
    

    以下範例使用 STRING Hive 分割模式:

    bq mkdef --source_format=CSV \
      --connection_id=us.my-connection \
      --hive_partitioning_mode=STRING \
      --hive_partitioning_source_uri_prefix=gs://myBucket/myTable \
      gs://myBucket/myTable/* > mytable_def
    
    bq mk --external_table_definition=mytable_def \
      mydataset.mytable \
      Region:STRING,Quarter:STRING,Total_sales:INTEGER
    

    以下範例使用 CUSTOM Hive 分割模式:

    bq mkdef --source_format=CSV \
      --connection_id=us.my-connection \
      --hive_partitioning_mode=CUSTOM \
      --hive_partitioning_source_uri_prefix=gs://myBucket/myTable/{dt:DATE}/{val:STRING} \
      gs://myBucket/myTable/* > mytable_def
    
    bq mk --external_table_definition=mytable_def \
      mydataset.mytable \
      Region:STRING,Quarter:STRING,Total_sales:INTEGER
    

    API

    如要使用 BigQuery API 設定 Hive 分區,請在建立資料表定義檔時,將 hivePartitioningOptions 物件納入 ExternalDataConfiguration 物件。如要建立 BigLake 資料表,您也必須為 connectionId 欄位指定值。

    如果將 hivePartitioningOptions.mode 欄位設為 CUSTOM,則必須在 hivePartitioningOptions.sourceUriPrefix 欄位中編碼分區索引鍵結構定義,如下所示: gs://BUCKET/PATH_TO_TABLE/{KEY1:TYPE1}/{KEY2:TYPE2}/...

    如要在查詢時強制使用述詞篩選器,請將 hivePartitioningOptions.requirePartitionFilter 欄位設為 true

    Terraform

    這個範例會根據分區資料建立 BigLake 資料表。

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

    
    # This creates a bucket in the US region named "my-bucket" with a pseudorandom
    # suffix.
    resource "random_id" "default" {
      byte_length = 8
    }
    resource "google_storage_bucket" "default" {
      name                        = "my-bucket-${random_id.default.hex}"
      location                    = "US"
      force_destroy               = true
      uniform_bucket_level_access = true
    }
    
    resource "google_storage_bucket_object" "default" {
      # This creates a fake message to create partition locations on the table.
      # Otherwise, the table deployment fails.
      name    = "publish/dt=2000-01-01/hr=00/min=00/fake_message.json"
      content = "{\"column1\": \"XXX\"}"
      bucket  = google_storage_bucket.default.name
    }
    
    # This queries the provider for project information.
    data "google_project" "default" {}
    
    # This creates a connection in the US region named "my-connection".
    # This connection is used to access the bucket.
    resource "google_bigquery_connection" "default" {
      connection_id = "my-connection"
      location      = "US"
      cloud_resource {}
    }
    
    # This grants the previous connection IAM role access to the bucket.
    resource "google_project_iam_member" "default" {
      role    = "roles/storage.objectViewer"
      project = data.google_project.default.id
      member  = "serviceAccount:${google_bigquery_connection.default.cloud_resource[0].service_account_id}"
    }
    
    # This makes the script wait for seven minutes before proceeding. This lets IAM
    # permissions propagate.
    resource "time_sleep" "default" {
      create_duration = "7m"
    
      depends_on = [google_project_iam_member.default]
    }
    
    # This defines a Google BigQuery dataset with default expiration times for
    # partitions and tables, a description, a location, and a maximum time travel.
    resource "google_bigquery_dataset" "default" {
      dataset_id                      = "my_dataset"
      default_partition_expiration_ms = 2592000000  # 30 days
      default_table_expiration_ms     = 31536000000 # 365 days
      description                     = "My dataset description"
      location                        = "US"
      max_time_travel_hours           = 96 # 4 days
    
      # This defines a map of labels for the bucket resource,
      # including the labels "billing_group" and "pii".
      labels = {
        billing_group = "accounting",
        pii           = "sensitive"
      }
    }
    
    # This creates a BigQuery table with partitioning and automatic metadata
    # caching.
    resource "google_bigquery_table" "default" {
      dataset_id = google_bigquery_dataset.default.dataset_id
      table_id   = "my_table"
      schema     = jsonencode([{ "name" : "column1", "type" : "STRING", "mode" : "NULLABLE" }])
      external_data_configuration {
        # This defines an external data configuration for the BigQuery table
        # that reads Parquet data from the publish directory of the default
        # Google Cloud Storage bucket.
        autodetect    = false
        source_format = "PARQUET"
        connection_id = google_bigquery_connection.default.name
        source_uris   = ["gs://${google_storage_bucket.default.name}/publish/*"]
        # This configures Hive partitioning for the BigQuery table,
        # partitioning the data by date and time.
        hive_partitioning_options {
          mode                     = "CUSTOM"
          source_uri_prefix        = "gs://${google_storage_bucket.default.name}/publish/{dt:STRING}/{hr:STRING}/{min:STRING}"
          require_partition_filter = false
        }
        # This enables automatic metadata refresh.
        metadata_cache_mode = "AUTOMATIC"
      }
    
    
      # This sets the maximum staleness of the metadata cache to 10 hours.
      max_staleness = "0-0 0 10:0:0"
    
      deletion_protection = false
    
      depends_on = [
        time_sleep.default,
        google_storage_bucket_object.default
      ]
    }

    如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。

    準備 Cloud Shell

    1. 啟動 Cloud Shell
    2. 設定要套用 Terraform 設定的預設 Google Cloud 專案。

      每項專案只需要執行一次這個指令,且可以在任何目錄中執行。

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      如果您在 Terraform 設定檔中設定明確值,環境變數就會遭到覆寫。

    準備目錄

    每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。

    1. Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱的副檔名必須是 .tf,例如 main.tf。在本教學課程中,這個檔案稱為 main.tf
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. 如果您正在學習教學課程,可以複製每個章節或步驟中的範例程式碼。

      將範例程式碼複製到新建立的 main.tf

      視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您使用這個方法。

    3. 查看並修改範例參數,套用至您的環境。
    4. 儲存變更。
    5. 初始化 Terraform。每個目錄只需執行一次這項操作。
      terraform init

      如要使用最新版 Google 供應商,請加入 -upgrade 選項:

      terraform init -upgrade

    套用變更

    1. 檢查設定,確認 Terraform 即將建立或更新的資源符合您的預期:
      terraform plan

      視需要修正設定。

    2. 執行下列指令,並在提示中輸入 yes,即可套用 Terraform 設定:
      terraform apply

      等待 Terraform 顯示「Apply complete!」訊息。

    3. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

    設定存取控管政策

    您可以透過多種方法控管 BigLake 資料表的存取權:

    舉例來說,假設您要限制資料集 mydataset 中資料表 mytable 的資料列存取權:

    +---------+---------+-------+
    | country | product | price |
    +---------+---------+-------+
    | US      | phone   |   100 |
    | JP      | tablet  |   300 |
    | UK      | laptop  |   200 |
    +---------+---------+-------+
    

    您可以為 Kim (kim@example.com) 建立資料列層級篩選器,限制他們只能存取 country 等於 US 的資料列。

    CREATE ROW ACCESS POLICY only_us_filter
    ON mydataset.mytable
    GRANT TO ('user:kim@example.com')
    FILTER USING (country = 'US');

    接著,Kim 執行下列查詢:

    SELECT * FROM projectid.mydataset.mytable;

    輸出結果只會顯示 country 等於 US 的資料列:

    +---------+---------+-------+
    | country | product | price |
    +---------+---------+-------+
    | US      | phone   |   100 |
    +---------+---------+-------+
    

    查詢 BigLake 資料表

    詳情請參閱查詢 BigLake 資料表中的 Cloud Storage 資料

    更新 BigLake 資料表

    您可以視需要更新 BigLake 資料表,例如變更中繼資料快取。如要取得資料表詳細資料 (例如來源格式和來源 URI),請參閱「取得資料表資訊」。

    您也可以使用相同程序,將以 Cloud Storage 為基礎的外部資料表連結至連線,藉此升級成 BigLake 資料表。詳情請參閱將外部資料表升級為 BigLake 資料表

    如要更新 BigLake 資料表,請選取下列其中一個選項:

    SQL

    使用 CREATE OR REPLACE EXTERNAL TABLE DDL 陳述式更新資料表:

    1. 前往 Google Cloud 控制台的「BigQuery」頁面。

      前往「BigQuery」

    2. 在查詢編輯器中輸入下列陳述式:

      CREATE OR REPLACE EXTERNAL TABLE
        `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME`
        WITH CONNECTION {`REGION.CONNECTION_ID` | DEFAULT}
        OPTIONS(
          format ="TABLE_FORMAT",
          uris = ['BUCKET_PATH'],
          max_staleness = STALENESS_INTERVAL,
          metadata_cache_mode = 'CACHE_MODE'
          );

      取代下列項目:

      • PROJECT_ID:包含資料表的專案名稱
      • DATASET:包含資料表的資料集名稱
      • EXTERNAL_TABLE_NAME:資料表名稱
      • REGION:包含連線的區域
      • CONNECTION_ID:要使用的連線名稱

        如要使用 預設連線,請指定 DEFAULT,而非包含 REGION.CONNECTION_ID 的連線字串。

      • TABLE_FORMAT:資料表使用的格式

        更新資料表時無法變更這項設定。

      • BUCKET_PATH:Cloud Storage 值區的路徑,其中包含外部資料表的資料,格式為 ['gs://bucket_name/[folder_name/]file_name']

        如要在路徑中指定一個星號 (*) 萬用字元,即可從值區選取多個檔案。例如,['gs://mybucket/file_name*']。詳情請參閱「Cloud Storage URI 的萬用字元支援」。

        如要為 uris 選項指定多個值區,請提供多個路徑。

        以下範例顯示有效的 uris 值:

        • ['gs://bucket/path1/myfile.csv']
        • ['gs://bucket/path1/*.csv']
        • ['gs://bucket/path1/*', 'gs://bucket/path2/file00*']

        指定以多個檔案為目標的 uris 值時,所有檔案都必須共用相容的結構定義。

        如要進一步瞭解如何在 BigQuery 中使用 Cloud Storage URI,請參閱「Cloud Storage 資源路徑」。

      • STALENESS_INTERVAL:指定對資料表執行的作業是否使用快取中繼資料,以及快取中繼資料必須有多新,作業才能使用

        如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。

        如要停用中繼資料快取功能,請指定 0。這是目前的預設做法。

        如要啟用中繼資料快取功能,請指定介於 30 分鐘至 7 天之間的間隔常值。舉例來說,如要指定 4 小時的過時間隔,請輸入 INTERVAL 4 HOUR。如果資料表的中繼資料在過去 4 小時內重新整理過,針對資料表執行的作業就會使用這個值,如果快取中繼資料的建立時間早於該時間,作業會改為從 Cloud Storage 擷取中繼資料。

      • CACHE_MODE:指定中繼資料快取是否自動或手動重新整理

        如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。

        設為 AUTOMATIC,中繼資料快取就會以系統定義的時間間隔 (通常為 30 到 60 分鐘) 重新整理。

        如要依您決定的時間表重新整理中繼資料快取,請設為 MANUAL。在這種情況下,您可以呼叫 BQ.REFRESH_EXTERNAL_METADATA_CACHE 系統程序來重新整理快取。

        如果 STALENESS_INTERVAL 設為大於 0 的值,您就必須設定 CACHE_MODE

    3. 按一下「執行」

    如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」。

    bq

    使用 bq mkdefbq update 指令更新資料表:

    1. 產生外部資料表定義,說明要變更的資料表層面:

      bq mkdef --connection_id=PROJECT_ID.REGION.CONNECTION_ID \
      --source_format=TABLE_FORMAT \
      --metadata_cache_mode=CACHE_MODE \
      "BUCKET_PATH" > /tmp/DEFINITION_FILE

      更改下列內容:

      • PROJECT_ID:包含連線的專案名稱
      • REGION:包含連線的區域
      • CONNECTION_ID:要使用的連線名稱
      • TABLE_FORMAT:資料表使用的格式。更新資料表時無法變更這項設定。
      • CACHE_MODE:指定中繼資料快取是否自動或手動重新整理。如要進一步瞭解中繼資料快取考量事項,請參閱「中繼資料快取提升效能」一文。

        設為 AUTOMATIC,中繼資料快取就會以系統定義的時間間隔重新整理,通常介於 30 到 60 分鐘之間。

        如要依您決定的時間表重新整理中繼資料快取,請設為 MANUAL。在這種情況下,您可以呼叫 BQ.REFRESH_EXTERNAL_METADATA_CACHE 系統程序來重新整理快取。

        如果 STALENESS_INTERVAL 設為大於 0 的值,您就必須設定 CACHE_MODE

      • BUCKET_PATH:包含外部資料表資料的 Cloud Storage bucket 路徑,格式為 gs://bucket_name/[folder_name/]file_name

        如要在路徑中指定一個星號 (*) 萬用字元,即可限制從值區選取的檔案。例如,gs://mybucket/file_name*。詳情請參閱「Cloud Storage URI 的萬用字元支援」。

        如要為 uris 選項指定多個值區,請提供多個路徑。

        以下範例顯示有效的 uris 值:

        • gs://bucket/path1/myfile.csv
        • gs://bucket/path1/*.csv
        • gs://bucket/path1/*,gs://bucket/path2/file00*

        指定以多個檔案為目標的 uris 值時,所有檔案都必須共用相容的結構定義。

        如要進一步瞭解如何在 BigQuery 中使用 Cloud Storage URI,請參閱「Cloud Storage 資源路徑」。

      • DEFINITION_FILE:您要建立的資料表定義檔名稱。

    2. 使用新的外部資料表定義更新資料表:

      bq update --max_staleness=STALENESS_INTERVAL \
      --external_table_definition=/tmp/DEFINITION_FILE \
      PROJECT_ID:DATASET.EXTERNAL_TABLE_NAME

      更改下列內容:

      • STALENESS_INTERVAL:指定對資料表執行的作業是否使用快取中繼資料,以及快取中繼資料必須有多新,作業才能使用。如要進一步瞭解中繼資料快取注意事項,請參閱「中繼資料快取提升效能」。

        如要停用中繼資料快取功能,請指定 0。這是目前的預設做法。

        如要啟用中繼資料快取,請使用INTERVAL 資料類型文件所述的 Y-M D H:M:S 格式,指定 30 分鐘到 7 天之間的間隔值。舉例來說,如要指定 4 小時的過時間隔,請輸入 0-0 0 4:0:0。如果資料表在過去 4 小時內重新整理過,針對資料表執行的作業就會使用快取中繼資料。如果快取中繼資料較舊,作業會改為從 Cloud Storage 擷取中繼資料。

      • DEFINITION_FILE:您建立或更新的資料表定義檔案名稱。

      • PROJECT_ID:包含資料表的專案名稱

      • DATASET:包含資料表的資料集名稱

      • EXTERNAL_TABLE_NAME:資料表名稱

    示例

    以下範例會更新 mytable,只要快取中繼資料在過去 4.5 小時內重新整理過,就會使用快取中繼資料,並自動重新整理快取中繼資料:

    bq update --project_id=myproject --max_staleness='0-0 0 4:30:0' \
    --external_table_definition=enable_metadata.json mydataset.mytable
    

    其中 enable_metadata.json 包含下列內容: json { "metadataCacheMode": "AUTOMATIC" }

    稽核記錄

    如要瞭解 BigQuery 中的記錄,請參閱「BigQuery 監控簡介」。如要進一步瞭解記錄檔 Google Cloud,請參閱 Cloud Logging

    後續步驟