查詢 Google 雲端硬碟資料

本頁面說明如何使用 BigQuery 查詢儲存在 Google 雲端硬碟中的資料。

BigQuery 同時支援查詢個人 Google 雲端硬碟檔案和共用檔案。如要進一步瞭解 Google 雲端硬碟,請參閱 G Suite 學習中心

您可以查詢 Google 雲端硬碟中以下格式的檔案:

  • 逗號分隔值 (CSV)
  • 換行符號分隔的 JSON
  • Avro
  • Google 試算表

如要查詢 Google 雲端硬碟外部資料來源,請提供資料的 Google 雲端硬碟 URI 路徑,並建立參照資料來源的外部資料表。用來參照 Google 雲端硬碟資料來源的資料表可以是永久資料表,也可以是臨時資料表

取得 Google 雲端硬碟 URI

如要建立 Google 雲端硬碟資料來源的外部資料表,您必須提供 Google 雲端硬碟 URI。如何取得 Google 雲端硬碟 URI:

  1. 前往 Google 雲端硬碟

  2. 在檔案上按一下滑鼠右鍵並選取 [Get shareable link] (取得檔案共用連結)。URI 格式範例如下:https://drive.google.com/open?id=file_id

    其中:

    • file_id 是您 Google 雲端硬碟檔案的 ID (由英數字元組成)

您也可以開啟檔案來擷取 URI。舉例來說,如要擷取 Google 試算表檔案的 URI:

  1. 前往 Google 試算表

  2. 開啟試算表,然後複製瀏覽器網址列中的 URI。URI 格式範例如下:https://docs.google.com/spreadsheets/d/file_id

啟用 Google 雲端硬碟存取權

無論是定義聯合來源或執行查詢期間,只要存取託管於 Google 雲端硬碟中的資料就需要額外的 OAuth 範圍。雖然預設為停用,但您可以透過下列機制將其包含在 UI、CLI 或 API 中:

主控台

在 BigQuery 網頁版 UI 中建立永久資料表時,請按照網頁驗證步驟操作。當系統提示時,按一下 [Allow] (允許),授予 BigQuery 用戶端工具 Google 雲端硬碟的存取權。

傳統版 UI

在 BigQuery 網頁版 UI 中建立永久資料表時,請按照網頁驗證步驟操作。當系統提示時,按一下 [Allow] (允許),授予 BigQuery 用戶端工具 Google 雲端硬碟的存取權。

CLI

如何啟用 Google 雲端硬碟存取權:

  1. 輸入以下指令,確認您擁有最新版本的指令列工具。

    gcloud components update
    
  2. 輸入下列指令,驗證 Google 雲端硬碟。

    gcloud auth login --enable-gdrive-access
    

API

如果您使用 BigQuery API,除了 BigQuery 的 OAuth 範圍,您還必須要求 Google 雲端硬碟的 OAuth 範圍

Python

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

import google.auth
# from google.cloud import bigquery

# Create credentials with Drive & BigQuery API scopes
# Both APIs must be enabled for your project before running this code
credentials, project = google.auth.default(scopes=[
    'https://www.googleapis.com/auth/drive',
    'https://www.googleapis.com/auth/bigquery',
])
client = bigquery.Client(credentials=credentials, project=project)

永久與臨時外部資料表

您可以在 BigQuery 中使用永久資料表或臨時資料表查詢外部資料來源。永久資料表是在資料集中建立並連結至外部資料來源的資料表。由於資料表為永久性,因此您可以使用資料集層級存取權控管機制,將資料表分享給其他同樣具備基礎外部資料來源存取權的使用者,而且您可以隨時查詢此資料表。

使用臨時資料表查詢外部資料來源時,您必須提交一個指令,該指令必須內含查詢並建立連結至外部資料來源的非永久性資料表。使用臨時資料表時,不用在 BigQuery 資料集內建立資料表。因為資料表不會永久儲存在資料集中,所以無法與其他使用者分享。使用臨時資料表查詢外部資料來源,對於臨時的一次性外部資料查詢作業,或對擷取、轉換和載入 (ETL) 程序而言非常有用。

使用永久外部資料表查詢 Google 雲端硬碟資料

所需的權限和範圍

使用永久資料表查詢 Google 雲端硬碟中的外部資料時,您必須具備在專案層級或更高層級執行查詢工作的權限、建立指向外部資料之資料表的權限,也需要可讓您存取資料表資料的權限。當您的外部資料是儲存在 Google 雲端硬碟中時,您還需要具備存取連結到外部資料表之 Google 雲端硬碟檔案的權限。

BigQuery 權限

您至少要具備下列權限,才能在 BigQuery 中建立及查詢外部資料表。

  • bigquery.tables.create
  • bigquery.tables.getData
  • bigquery.jobs.create

以下是具有 bigquery.tables.createbigquery.tables.getData 權限的預先定義 Cloud IAM 角色:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

以下是具有 bigquery.jobs.create 權限的預先定義 Cloud IAM 角色:

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

此外,具備 bigquery.datasets.create 權限的使用者在建立資料集時,會獲得該資料集的 bigquery.dataOwner 存取權。 bigquery.dataOwner 存取權可讓使用者在資料集中建立外部資料表,但使用者仍須具備 bigquery.jobs.create 權限才能查詢資料。

如要深入瞭解 BigQuery 中的 Cloud IAM 角色和權限,請參閱存取權控管

Google 雲端硬碟權限

您至少必須擁有連結至外部資料表之 Google 雲端硬碟檔案的 View 權限,才能查詢 Google 雲端硬碟中的外部資料。

Compute Engine 執行個體的範圍

建立 Compute Engine 執行個體時,您可以指定執行個體的範圍清單。這個範圍會控管執行個體對 Google Cloud Platform 產品 (包含 Google 雲端硬碟) 的存取權。在 VM 上執行的應用程式,會使用服務帳戶呼叫 Google Cloud Platform API。

如果將 Compute Engine 執行個體設為以服務帳戶的形式執行,且這個服務帳戶會存取連結至 Google 雲端硬碟資料來源的外部資料表,則您必須為執行個體新增 Google 雲端硬碟的 OAuth 範圍 (https://www.googleapis.com/auth/drive)。

如需為 Compute Engine 執行個體套用範圍的相關資訊,請參閱變更執行個體的服務帳戶與存取範圍。如要深入瞭解 Compute Engine 服務帳戶,請參閱服務帳戶

建立並查詢永久外部資料表

您可以透過下列方式建立已連結至外部資料來源的永久資料表:

如要使用永久資料表查詢外部資料來源,您可在 BigQuery 資料集中建立連結至外部資料來源的資料表。資料不會儲存在 BigQuery 資料表中。由於資料表為永久性,因此您可以使用資料集層級存取權控管機制,將資料表分享給其他同樣具備基礎外部資料來源存取權的使用者。

在 BigQuery 中建立永久外部資料表時,您可以透過三種方式指定結構定義資訊:

  • 如果您使用 tables.insert API 方法來建立永久外部資料表,則可建立包含結構定義和 ExternalDataConfiguration 的資料表資源。將 autodetect 參數設為 true,即可為支援的資料來源啟用結構定義的自動偵測功能。
  • 如果您是使用 CLI 來建立永久外部資料表,則可使用資料表定義檔、建立及使用自己的結構定義檔,或是在指令列以內嵌方式輸入結構定義。建立資料表定義檔時,您可以針對支援的資料來源啟用結構定義自動偵測功能。
  • 如果您是使用主控台或傳統 BigQuery 網頁版 UI 來建立永久外部資料表,可以手動輸入資料表結構定義,或針對支援的資料來源使用結構定義自動偵測功能。

如要建立外部資料表:

主控台

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

  2. 在導覽面板的「Resources」(資源) 區段,展開您的專案並選取資料集。按一下視窗右側的 [Create table] (建立資料表)

    建立資料表

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

    • 在「Create table from」(使用下列資料建立資料表) 部分,選取 [Drive] (雲端硬碟)

    • 在「Select Drive URI」(選取雲端硬碟 URI) 欄位中,輸入 Google 雲端硬碟 URI。請注意,Google 雲端硬碟 URI 不支援萬用字元。

    • 在「File format」(檔案格式) 部分選取資料格式。Google 雲端硬碟資料的有效格式包括:

      • 逗號分隔值 (CSV)
      • 換行符號分隔的 JSON
      • Avro
      • Google 試算表
  4. (選用) 如果選擇 Google 試算表,請在「Sheet range (Optional)」(工作表範圍 (選用)) 方塊中指定要查詢的工作表和儲存格範圍。您可以指定工作表名稱,也可以指定儲存格範圍 sheet_name!top_left_cell_id:bottom_right_cell_id,例如「Sheet1!A1:B20」。如果未指定工作表範圍,系統則會使用檔案中的第一個工作表。

  5. 在「Create table」(建立資料表) 頁面的「Destination」(目的地) 區段中:* 針對「Dataset name」(資料集名稱) 選擇適當的資料集,然後在「Table name」(資料表名稱) 欄位中,輸入您要在 BigQuery 建立資料表時使用的名稱。

    選取資料集

    • 確認「Table type」(資料表類型) 已設為 [External table] (外部資料表)。
  6. 在「Schema」(結構定義) 區段中,輸入結構定義

    • 如果是 JSON 或 CSV 檔案,您可以勾選 [Auto-detect] (自動偵測) 選項來啟用結構定義自動偵測功能。 [Auto-detect] (自動偵測) 不適用於 Cloud Datastore 匯出項目、Cloud Firestore 匯出項目和 Avro 檔案。系統會自動從自述來源資料中,為這些檔案類型擷取結構定義資訊。
    • 透過以下方式,手動輸入結構定義資訊:
      • 啟用 [Edit as text] (以文字形式編輯),然後以 JSON 陣列的形式輸入資料表結構定義。注意:您可以輸入下列 CLI 指令,以 JSON 格式查看現有資料表的結構定義:bq show --format=prettyjson dataset.table
      • 使用 [Add Field] (新增欄位) 手動輸入結構定義。
  7. 按一下 [Create table] (建立資料表)

  8. 必要的話,選取帳戶然後按一下 [Allow] (允許),授予 BigQuery 的用戶端工具 Google 雲端硬碟的存取權。

接著,您就可以對資料表執行查詢,就像是原生 BigQuery 資料表一樣,但外部資料來源的限制仍適用。

查詢完成後,可以將結果下載為 CSV 或 JSON、將結果儲存為資料表,或將結果儲存至 Google 試算表。詳情請參閱下載、儲存及匯出資料

傳統版 UI

  1. 前往 BigQuery 網頁版 UI。

    前往 BigQuery 網頁版 UI

  2. 在導覽面板中,將游標懸停在某個資料集上,按一下向下箭頭圖示 向下箭頭圖示圖片,然後按一下 [Create new table] (建立新資料表)

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

    • 針對「Location」(位置) 選取 [Google Drive] (Google 雲端硬碟),然後在來源欄位輸入 Google 雲端硬碟 URI。請注意,Google 雲端硬碟 URI 不支援萬用字元。
    • 在「File format」(檔案格式) 部分選取資料格式。Google 雲端硬碟資料的有效格式包括:

      • 逗號分隔值 (CSV)
      • JSON (以換行符號分隔)
      • Avro
      • Google 試算表
  4. 在「Create Table」(建立資料表) 頁面的「Destination Table」(目標資料表) 區段中:

    • 針對「Table name」(資料表名稱) 選擇適當的資料集,然後在資料表名稱欄位中,輸入要在 BigQuery 中建立的永久資料表名稱。
    • 確認「Table type」(資料表類型) 已設為 [External table] (外部資料表)。
  5. 在「Schema」(結構定義) 部分中,輸入結構定義資訊。

    • 如果是 JSON 或 CSV 檔案,您可以勾選 [Auto-detect] (自動偵測) 選項,啟用結構定義自動偵測功能。網頁版 UI 中的結構定義自動偵測功能目前不支援 Google 試算表 (但可透過 CLI 和 API 使用)。此外,[Auto-detect] (自動偵測) 選項也不適用於 Avro 資料來源。系統會自動從 Avro 檔案中擷取結構定義資訊。

    • 如果是 CSV、JSON 或 Google 試算表檔案,您可以透過下列任一方式,手動輸入結構定義資訊:

      • 按一下 [Edit as text] (以文字形式編輯),然後以 JSON 格式輸入資料表結構定義
      • 使用 [Add Field] (新增欄位) 手動輸入結構定義
  6. 在「Options」(選項) 區段選取適用的項目,然後按一下 [Create Table] (建立資料表)

  7. 選取您的帳戶,然後按一下 [Allow] (允許),授予 BigQuery 用戶端工具 Google 雲端硬碟的存取權。

    用戶端工具存取權對話方塊

接著,您就可以對資料表執行查詢,就像是原生 BigQuery 資料表一樣,但外部資料來源的限制仍適用。

查詢完成後,可以將結果下載為 CSV 或 JSON、將結果儲存為資料表,或將結果儲存至 Google 試算表。詳情請參閱下載、儲存及匯出資料一文。

CLI

您可以在 BigQuery 指令列工具中使用 bq mk 指令建立資料表。使用 CLI 建立已連結至外部資料來源的資料表時,您可以透過以下項目識別資料表的結構定義:

  • 資料表定義檔 (儲存在本機)
  • 內嵌結構定義
  • JSON 結構定義檔 (儲存在本機)

如要使用資料表定義檔建立已連結至 Google 雲端硬碟資料來源的永久資料表,請輸入以下指令。

bq mk \
--external_table_definition=definition_file \
dataset.table

其中:

  • definition_file 是本機電腦上資料表定義檔的路徑。
  • dataset 是包含該資料表的資料集名稱。
  • table 是您正要建立之資料表的名稱。

舉例來說,以下指令會使用名稱為 mytable_def 的資料表定義檔,建立名為 mytable 的永久資料表。

bq mk --external_table_definition=/tmp/mytable_def mydataset.mytable

如要使用內嵌結構定義建立已連結至外部資料來源的永久資料表,請輸入下列指令。

bq mk \
--external_table_definition=schema@source_format=drive_uri \
dataset.table

其中:

  • schema 是結構定義,格式為 field:data_type,field:data_type
  • source_formatCSVNEWLINE_DELIMITED_JSONAVROGOOGLE_SHEETS
  • drive_uri 是您的 Google 雲端硬碟 URI
  • dataset 是包含該資料表的資料集名稱。
  • table 是您正要建立之資料表的名稱。

舉例來說,下方指令會使用以下的結構定義,建立名稱為 sales 且連結至 Google 雲端硬碟中儲存之 Google 試算表檔案的永久資料表:Region:STRING,Quarter:STRING,Total_sales:INTEGER

bq mk \
--external_table_definition=Region:STRING,Quarter:STRING,Total_sales:INTEGER@GOOGLE_SHEETS=https://drive.google.com/open?id=1234_AbCD12abCd \
mydataset.sales

如要使用 JSON 結構定義檔來建立連結至外部資料來源的永久資料表,請輸入下列指令。

bq mk \
--external_table_definition=schema_file@source_format=drive_uri \
dataset.table

其中:

  • schema_file 是您本機電腦上的 JSON 結構定義檔路徑。
  • source_formatCSVNEWLINE_DELIMITED_JSONAVROGOOGLE_SHEETS
  • drive_uri 是您的 Google 雲端硬碟 URI
  • dataset 是包含該資料表的資料集名稱。
  • table 是您正要建立之資料表的名稱。

舉例來說,下列指令會使用 /tmp/sales_schema.json 結構定義檔,建立名為 sales 且連結至 Google 雲端硬碟中儲存之 CSV 檔案的資料表。

bq mk \
--external_table_definition=/tmp/sales_schema.json@CSV=https://drive.google.com/open?id=1234_AbCD12abCd \
mydataset.sales

永久資料表建立完成後,您就可以對資料表執行查詢,就像是原生 BigQuery 資料表一樣,但外部資料來源的限制仍適用。

查詢完成後,可以將結果下載為 CSV 或 JSON、將結果儲存為資料表,或將結果儲存至 Google 試算表。詳情請參閱下載、儲存及匯出資料一文。

API

使用 tables.insert API 方法建立 ExternalDataConfiguration。指定 schema 屬性,或將 autodetect 屬性設為 true,為支援的資料來源啟用結構定義自動偵測功能。

Python

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

import google.auth
# from google.cloud import bigquery
# dataset_id = 'my_dataset'

# Create credentials with Drive & BigQuery API scopes
# Both APIs must be enabled for your project before running this code
credentials, project = google.auth.default(scopes=[
    'https://www.googleapis.com/auth/drive',
    'https://www.googleapis.com/auth/bigquery',
])
client = bigquery.Client(credentials=credentials, project=project)

# Configure the external data source
dataset_ref = client.dataset(dataset_id)
table_id = 'us_states'
schema = [
    bigquery.SchemaField('name', 'STRING'),
    bigquery.SchemaField('post_abbr', 'STRING')
]
table = bigquery.Table(dataset_ref.table(table_id), schema=schema)
external_config = bigquery.ExternalConfig('GOOGLE_SHEETS')
# Use a shareable link or grant viewing access to the email address you
# used to authenticate with BigQuery (this example Sheet is public)
sheet_url = (
    'https://docs.google.com/spreadsheets'
    '/d/1i_QCL-7HcSyUZmIbP9E6lO_T5u3HnpLe7dnpHaijg_E/edit?usp=sharing')
external_config.source_uris = [sheet_url]
external_config.options.skip_leading_rows = 1  # optionally skip header row
table.external_data_configuration = external_config

# Create a permanent table linked to the Sheets file
table = client.create_table(table)  # API request

# Example query to find states starting with 'W'
sql = 'SELECT * FROM `{}.{}` WHERE name LIKE "W%"'.format(
    dataset_id, table_id)

query_job = client.query(sql)  # API request

w_states = list(query_job)  # Waits for query to finish
print('There are {} states with names starting with W.'.format(
    len(w_states)))

使用臨時資料表查詢 Google 雲端硬碟資料

如要查詢外部資料來源,但不想建立永久資料表,請執行指令來合併以下項目:

系統會使用資料表定義檔或提供的結構定義來建立臨時外部資料表,然後對臨時外部資料表執行查詢。BigQuery CLI 及 API 支援使用臨時資料表查詢外部資料來源。

使用臨時外部資料表時,並不會在其中一個 BigQuery 資料集中建立資料表。因為資料表不會永久儲存在資料集中,所以無法與其他使用者分享。使用臨時資料表查詢外部資料來源,對於一次性、臨時查詢外部資料,或對擷取、轉換和載入 (ETL) 處理程序而言非常有用。

所需權限

使用臨時資料表查詢 Google 雲端硬碟中的外部資料時,您必須具備在專案層級或更高層級執行查詢工作的權限,也必須針對包含指向外部資料之資料表的資料集具備存取權限。在 Google 雲端硬碟中查詢資料時,您也必須擁有存取包含所需資料之 Google 雲端硬碟檔案的權限。

BigQuery 權限

您至少要具備下列權限,才能使用臨時資料表在 BigQuery 中查詢外部資料表。

  • bigquery.tables.getData
  • bigquery.jobs.create

以下是具有 bigquery.tables.getData 權限的預先定義 Cloud IAM 角色:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

以下是具有 bigquery.jobs.create 權限的預先定義 Cloud IAM 角色:

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

此外,具備 bigquery.datasets.create 權限的使用者在建立資料集時,會獲得該資料集的 bigquery.dataOwner 存取權。 bigquery.dataOwner 存取權可讓使用者建立及存取資料集中的外部資料表,但使用者仍須具備 bigquery.jobs.create 權限才能查詢資料。

如要深入瞭解 BigQuery 中的 Cloud IAM 角色和權限,請參閱存取權控管

Google 雲端硬碟權限

您至少必須擁有連結至外部資料表之 Google 雲端硬碟檔案的 View 權限,才能查詢 Google 雲端硬碟中的外部資料。

建立及查詢臨時資料表

您可以使用 CLI、API 或用戶端程式庫來建立和查詢連結到外部資料來源的臨時資料表。

CLI

您可以搭配 --external_table_definition 標記使用 bq query 指令,查詢已連結至外部資料來源的臨時資料表。使用 CLI 查詢已連結至外部資料來源的臨時資料表時,可以透過以下項目識別資料表的結構定義:

  • 資料表定義檔 (儲存在本機)
  • 內嵌結構定義
  • JSON 結構定義檔 (儲存在本機)

如要使用資料表定義檔查詢已連結至外部資料來源的臨時資料表,請輸入下列指令。

bq --location=location query \
--external_table_definition=table::definition_file \
'query'

其中:

  • location 是您的位置--location 為選用標記。
  • table 是您正要建立之臨時資料表的名稱。
  • definition_file 是本機電腦上資料表定義檔的路徑。
  • query 是要提交至臨時資料表的查詢。

舉例來說,下列指令會使用名為 sales_def 的資料表定義檔,建立及查詢名為 sales 的臨時資料表。

bq query \
--external_table_definition=sales::sales_def \
'SELECT
   Region,Total_sales
 FROM
   sales'

如要使用內嵌結構定義來查詢已連結至外部資料來源的臨時資料表,請輸入下列指令。

bq --location=location query \
--external_table_definition=table::schema@source_format=drive_uri \
'query'

其中:

  • location 是您的位置--location 為選用標記。
  • table 是您正要建立之臨時資料表的名稱。
  • schema 是內嵌結構定義,格式為 field:data_type,field:data_type
  • source_formatCSVNEWLINE_DELIMITED_JSONAVROGOOGLE_SHEETS
  • drive_uri 是您的 Google 雲端硬碟 URI
  • query 是要提交至臨時資料表的查詢。

舉例來說,下方指令會使用以下的結構定義,建立及查詢名為 sales 且連結至 Google 雲端硬碟中儲存之 CSV 檔案的臨時資料表:Region:STRING,Quarter:STRING,Total_sales:INTEGER

bq --location=US query \
--external_table_definition=sales::Region:STRING,Quarter:STRING,Total_sales:INTEGER@CSV=https://drive.google.com/open?id=1234_AbCD12abCd \
'SELECT
   Region,Total_sales
 FROM
   sales'

如要使用 JSON 結構定義檔來查詢已連結外部資料來源的臨時資料表,請輸入下列指令。

bq --location=location query \
--external_table_definition=schema_file@source_format=drive_uri \
'query'

其中:

  • location 是您的位置--location 為選用標記。
  • schema_file 是您本機電腦上的 JSON 結構定義檔路徑。
  • source_formatCSVNEWLINE_DELIMITED_JSONAVROGOOGLE_SHEETS
  • drive_uri 是您的 Google 雲端硬碟 URI
  • query 是要提交至臨時資料表的查詢。

舉例來說,下列指令會使用 /tmp/sales_schema.json 結構定義檔,建立及查詢名為 sales 且連結至 Google 雲端硬碟中儲存之 CSV 檔案的臨時資料表。

bq query \
--external_table_definition=sales::/tmp/sales_schema.json@CSV=https://drive.google.com/open?id=1234_AbCD12abCd \
'SELECT
   Total_sales
 FROM
   sales'

API

Python

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

import google.auth
# from google.cloud import bigquery

# Create credentials with Drive & BigQuery API scopes
# Both APIs must be enabled for your project before running this code
credentials, project = google.auth.default(scopes=[
    'https://www.googleapis.com/auth/drive',
    'https://www.googleapis.com/auth/bigquery',
])
client = bigquery.Client(credentials=credentials, project=project)

# Configure the external data source and query job
external_config = bigquery.ExternalConfig('GOOGLE_SHEETS')
# Use a shareable link or grant viewing access to the email address you
# used to authenticate with BigQuery (this example Sheet is public)
sheet_url = (
    'https://docs.google.com/spreadsheets'
    '/d/1i_QCL-7HcSyUZmIbP9E6lO_T5u3HnpLe7dnpHaijg_E/edit?usp=sharing')
external_config.source_uris = [sheet_url]
external_config.schema = [
    bigquery.SchemaField('name', 'STRING'),
    bigquery.SchemaField('post_abbr', 'STRING')
]
external_config.options.skip_leading_rows = 1  # optionally skip header row
table_id = 'us_states'
job_config = bigquery.QueryJobConfig()
job_config.table_definitions = {table_id: external_config}

# Example query to find states starting with 'W'
sql = 'SELECT * FROM `{}` WHERE name LIKE "W%"'.format(table_id)

query_job = client.query(sql, job_config=job_config)  # API request

w_states = list(query_job)  # Waits for query to finish
print('There are {} states with names starting with W.'.format(
    len(w_states)))

_FILE_NAME 虛擬資料欄

以外部資料來源為基礎的資料表可提供名為 _FILE_NAME 的虛擬資料欄。這個資料欄含有該列所屬檔案的完整路徑。此資料欄僅適用於參照儲存在 Google Cloud StorageGoogle 雲端硬碟中的外部資料的資料表。

系統會保留 _FILE_NAME 資料欄名稱,這表示您無法在任何資料表中使用該名稱建立資料欄。如要選取 _FILE_NAME 的值,您必須使用別名。下方範例查詢示範如何透過指派別名 fn 給虛擬資料欄的方式來選取 _FILE_NAME

bq query \
--project_id=project_id \
--use_legacy_sql=false \
'SELECT
   name,
   _FILE_NAME AS fn
 FROM
   `dataset.table_name`
 WHERE
   name contains "Alex"' 

其中:

  • project_id 是有效的專案 ID (如果您使用 Cloud Shell,或是在 Cloud SDK 中設定預設專案,則此為選用標記)
  • dataset 是儲存永久外部資料表的資料集名稱
  • table_name 是永久外部資料表的名稱
本頁內容對您是否有任何幫助?請提供意見:

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

這個網頁
需要協助嗎?請前往我們的支援網頁