查詢 Google 雲端硬碟資料
本文件說明如何查詢儲存在 Google 雲端硬碟外部資料表中的資料。
BigQuery 同時支援查詢個人 Google 雲端硬碟檔案和共用檔案。如要進一步瞭解 Google 雲端硬碟,請參閱 Google 雲端硬碟訓練課程和相關說明。
您可以透過永久外部資料表或臨時外部資料表查詢雲端硬碟資料,這些資料表是在您執行查詢時建立。
限制
如要瞭解外部資料表的相關限制,請參閱外部資料表限制。
必要的角色
如要查詢 Google 雲端硬碟外部資料表,請確認您具備下列角色:
- BigQuery 資料檢視者 (
roles/bigquery.dataViewer
) - BigQuery 使用者 (
roles/bigquery.user
)
視您的權限而定,您可以授予自己這些角色,或請管理員授予您這些角色。如要進一步瞭解如何授予角色,請參閱「查看可針對資源授予的角色」。
如要查看查詢外部資料表所需的確切 BigQuery 權限,請展開「Required permissions」部分:
所需權限
bigquery.jobs.create
bigquery.readsessions.create
(僅在您使用 BigQuery Storage Read API 讀取資料時才需要)bigquery.tables.get
bigquery.tables.getData
雲端硬碟權限
您至少必須擁有連結至外部資料表之 Google 雲端硬碟檔案的 View
權限,才能查詢 Google 雲端硬碟中的外部資料。
Compute Engine 執行個體的範圍
建立 Compute Engine 執行個體時,您可以指定執行個體的範圍清單。這些範圍會控管執行個體對 Google Cloud產品 (包括 Google 雲端硬碟) 的存取權。在 VM 上執行的應用程式會使用服務帳戶呼叫 Google Cloud API。
如果將 Compute Engine 執行個體設為以服務帳戶的形式執行,且這個服務帳戶會存取連結至 Google 雲端硬碟資料來源的外部資料表,則您必須為執行個體新增 Google 雲端硬碟的 OAuth 範圍 (https://www.googleapis.com/auth/drive.readonly
)。
如需為 Compute Engine 執行個體套用範圍的相關資訊,請參閱變更執行個體的服務帳戶與存取權範圍一節。如要進一步瞭解 Compute Engine 服務帳戶,請參閱服務帳戶一文。
使用永久外部資料表查詢 Google 雲端硬碟資料
建立 Google 雲端硬碟外部資料表後,您可以使用 GoogleSQL 語法查詢資料表,就像是查詢標準 BigQuery 資料表一樣。例如:SELECT field1, field2
FROM mydataset.my_drive_table;
。
使用臨時資料表查詢 Google 雲端硬碟資料
使用臨時資料表查詢外部資料來源,對於一次性、臨時查詢外部資料,或對擷取、轉換和載入 (ETL) 處理程序而言非常有用。
如要查詢外部資料來源,但不想建立永久資料表,請為臨時資料表提供資料表定義,然後在指令或呼叫中使用該資料表定義來查詢臨時資料表。您可以透過下列任一方式提供資料表定義:
- 資料表定義檔
- 內嵌結構定義
- JSON 結構定義檔案
系統會使用資料表定義檔或提供的結構定義來建立臨時外部資料表,然後對臨時外部資料表執行查詢。
使用臨時外部資料表時,並不會在某個 BigQuery 資料集中建立資料表。因為資料表不會永久儲存在資料集中,所以無法與其他使用者分享。
建立及查詢臨時資料表
您可以使用 bq 指令列工具、API 或用戶端程式庫,建立和查詢連結到外部資料來源的臨時資料表。
bq
您可以搭配 --external_table_definition
旗標使用 bq query
指令,查詢已連結至外部資料來源的臨時資料表。使用 bq 指令列工具查詢連結至外部資料來源的臨時資料表時,可以透過以下項目識別資料表的結構定義:
- 資料表定義檔 (儲存在本機)
- 內嵌結構定義
- 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_FORMAT
為CSV
、NEWLINE_DELIMITED_JSON
、AVRO
或GOOGLE_SHEETS
。DRIVE_URI
是你的 雲端硬碟 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_FORMT=DRIVE_URI \ 'QUERY'
其中:
LOCATION
是您的位置。--location
是選用旗標。SCHEMA_FILE
是您本機電腦上的 JSON 結構定義檔路徑。SOURCE_FILE
為CSV
、NEWLINE_DELIMITED_JSON
、AVRO
或GOOGLE_SHEETS
。DRIVE_URI
是你的 雲端硬碟 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
建立查詢工作設定。如需有關呼叫
jobs.query
和jobs.insert
的資訊,請參閱查詢資料的相關說明。建立
ExternalDataConfiguration
以指定外部資料來源。
Python
在嘗試這個範例之前,請先按照 BigQuery 快速入門:使用用戶端程式庫中的 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
Java
在嘗試這個範例之前,請先按照 BigQuery 快速入門:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
疑難排解
錯誤字串:Resources exceeded during query execution: Google Sheets service
overloaded.
這可能是暫時性錯誤,只要重新執行查詢即可修正。如果重新執行查詢後仍發生錯誤,請考慮簡化試算表,例如盡量減少公式的使用。詳情請參閱外部資料表限制。
後續步驟
- 瞭解如何在 BigQuery 中使用 SQL。
- 瞭解外部資料表。
- 瞭解 BigQuery 配額。