建立 Cloud Storage BigLake 資料表

Cloud Storage BigLake 資料表可讓您使用存取權委派功能,查詢 Cloud Storage 中的結構化資料。這種做法可將 BigLake 資料表的存取權與基礎資料儲存庫的存取權分開,因此使用者只需要資料表的權限。

本文說明如何建立 Cloud Storage BigLake 資料表。

事前準備

  1. 在 Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案。

    選取或建立專案所需的角色

    • 選取專案:選取專案時不需要特定 IAM 角色,只要您獲派某個專案的角色,即可選取該專案。
    • 建立專案:如要建立專案,您必須具備專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色。

    前往專案選取器

  2. 確認 Google Cloud 專案已啟用計費功能。

  3. 啟用 BigQuery Connection API (如果尚未啟用)。

    啟用 API 所需的角色

    您必須具備 serviceusage.services.enable 權限,才能啟用 API。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「Service Usage 管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

    啟用 API

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

  4. 在 Google Cloud 控制台啟用 Cloud Shell。

    啟用 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 資源連結」和「預設連結總覽」。

必要的角色

如要建立 BigLake 資料表,您必須具備下列 BigQuery Identity and Access Management (IAM) 權限:

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

BigQuery 管理員 (roles/bigquery.admin) 預先定義的身分與存取權管理角色包含這些權限。

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

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

位置考量

使用 Cloud Storage 儲存資料檔案時,建議使用 Cloud Storage 單一區域或雙區域 bucket,而非多區域 bucket,以提升效能。

在未分區的資料上建立外部資料表

如果您知道如何在 BigQuery 建立資料表,建立外部資料表的程序基本上大同小異。資料表可使用外部資料表支援的任何檔案格式。詳情請參閱「限制」一節。

建立 BigLake 資料表前,您必須先有資料集和Cloud 資源連結,才能存取 Cloud Storage。

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

控制台

  1. 前往「BigQuery」頁面。

    前往「BigQuery」

  2. 點選左側窗格中的 「Explorer」。

    醒目顯示的「Explorer」窗格按鈕。

    如果沒有看到左側窗格,請按一下 「Expand left pane」(展開左側窗格),開啟窗格。

  3. 在「Explorer」窗格中展開專案,點選「Datasets」(資料集),然後選取資料集。

  4. 展開 「Actions」(動作) 選項,然後點選「Create table」(建立資料表)。

  5. 在「Source」(來源) 部分,指定下列詳細資料:

    1. 在「Create table from」下拉式選單中,選取「Google Cloud Storage」。

    2. 在「Select file from GCS bucket or use a URI pattern」(從 GCS bucket 選取檔案或使用 URI 模式),瀏覽並選取要使用的 bucket 和檔案,或以 gs://bucket_name/[folder_name/]file_name 格式輸入路徑。

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

      Cloud Storage bucket 必須與包含您要建立的資料表的資料集位於相同位置。

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

  6. 在「Destination」(目的地) 部分,指定下列詳細資料:

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

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

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

    4. 在「資料表類型」部分,選取「外部資料表」。

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

    6. 在「連線 ID」部分,選取先前建立的連線。

  7. 在「Schema」(結構定義) 部分,您可以啟用結構定義自動偵測功能,也可以手動指定結構定義 (如有來源檔案)。如果沒有來源檔案,則必須手動指定結構定義。

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

    • 如要手動指定結構定義,請勿勾選「Auto-detect」(自動偵測) 選項。啟用「Edit as text」(以文字形式編輯),並以 JSON 陣列形式輸入資料表結構定義。

  8. 如要忽略含有與結構定義不符的多餘資料欄值的資料列,請展開「Advanced options」(進階選項) 區段,然後選取「Unknown values」(不明的值)。

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

建立永久資料表後,您就可以把這個資料表當做原生 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 是「Connection ID」(連線 ID) 中顯示的完整連線 ID 最後一個部分的值,例如 projects/myproject/locations/connection_location/connections/myconnection。

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

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

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

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

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

      您可以提供多個路徑,為 uris 選項指定多個 bucket。

      以下範例顯示有效的 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 是「Connection 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 中選取多個檔案。例如:gs://mybucket/file00*.parquet。詳情請參閱「Cloud Storage URI 的萬用字元支援」。

    您可以提供多個路徑,為 uris 選項指定多個 bucket。

    以下範例顯示有效的 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 中選取多個檔案。例如:gs://mybucket/file00*.parquet。詳情請參閱「Cloud Storage URI 的萬用字元支援」。

    您可以提供多個路徑,為 uris 選項指定多個 bucket。

    以下範例顯示有效的 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 是「Connection 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"

  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 控制台的使用者介面中,前往資源頁面,確認 Terraform 已建立或更新資源。

BigLake 支援結構定義自動偵測功能。不過,如果您未提供結構定義,且服務帳戶未在先前步驟中獲得存取權,則在嘗試自動偵測結構定義時,這些步驟會失敗,並顯示存取遭拒訊息。

依據 Apache Hive 分區資料建立 BigLake 資料表

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

建立 BigLake 資料表前,您必須先有資料集和Cloud 資源連結,才能存取 Cloud Storage。

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

控制台

  1. 前往「BigQuery」頁面。

    前往「BigQuery」

  2. 點選左側窗格中的 「Explorer」。

    醒目顯示的「Explorer」窗格按鈕。

    如果沒有看到左側窗格,請按一下 「Expand left pane」(展開左側窗格),開啟窗格。

  3. 在「Explorer」窗格中展開專案,依序點選「Datasets」(資料集) 和資料集。

  4. 按一下 [Create table] (建立資料表)。「建立資料表」窗格隨即開啟。

  5. 在「Source」(來源) 部分,指定下列詳細資料:

    1. 在「建立資料表來源」部分,選取「Google Cloud Storage」。

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

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

    4. 選取「Source data partitioning」(來源資料分區) 核取方塊,然後指定下列詳細資料:

      1. 在「Select Source URI Prefix」(選取來源 URI 前置字串),輸入 URI 前置字串。例如:gs://my_bucket/my_files。
      2. 選用:如要對這個資料表的所有查詢要求分區篩選器,請勾選「Require partition filter」(必須使用分區篩選器) 核取方塊。規定必須使用分區篩選器,可降低費用並提高成效。詳情請參閱「要求在查詢中對分區索引鍵使用述詞篩選器」。
      3. 在「Partition inference mode」(分區推論模式) 部分,選取下列其中一個選項:

        • 「Automatically infer types」(自動推論類型):將分區結構定義偵測模式設為 AUTO。
        • 將所有資料欄視為字串:將分區結構定義偵測模式設為 STRINGS。
        • 「Provide my own」(自行提供):將分區結構定義偵測模式設為 CUSTOM,並手動輸入分區索引鍵的結構定義資訊。詳情請參閱「提供自訂分區索引鍵結構定義」。
  6. 在「Destination」(目的地) 部分,指定下列詳細資料:

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

  8. 如要忽略含有與結構定義不符的多餘資料欄值的資料列,請展開「Advanced options」(進階選項) 區段,然後選取「Unknown values」(不明值)。

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

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 是「Connection 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 是「Connection 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_MODE 為 CUSTOM,請在來源 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。這是目前的預設做法。

    如要啟用中繼資料快取功能,請指定 30 分鐘到 7 天之間的間隔值,並使用INTERVAL 資料類型說明文件中所述的 Y-M D H:M:S 格式。舉例來說,如要指定 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"

  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 控制台的使用者介面中,前往資源頁面,確認 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 bucket 的路徑,其中包含外部資料表的資料,格式為 ['gs://bucket_name/[folder_name/]file_name']。

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

      您可以提供多個路徑,為 uris 選項指定多個 bucket。

      以下範例顯示有效的 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 mkdef 和 bq 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。

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

      您可以提供多個路徑,為 uris 選項指定多個 bucket。

      以下範例顯示有效的 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」。

後續步驟