使用遠端函式分析物件資料表
本文件說明如何使用遠端函式,分析物件資料表中的非結構化資料。
總覽
您可以使用遠端函式,分析物件資料表所代表的非結構化資料。遠端函式可讓您呼叫在 Cloud Run 函式或 Cloud Run 上執行的函式,您可以對其進行程式設計,以存取下列資源:
- Google 的預先訓練 AI 模型,包括 Cloud Vision API 和 Document AI。
- 開放原始碼程式庫,例如 Apache Tika。
- 您自己的自訂模型。
如要使用遠端函式分析物件表資料,您必須在呼叫遠端函式時,為物件表中的物件產生並傳入已簽署的網址。這些已簽署的網址會授予遠端函式對物件的存取權。
所需權限
如要建立遠端函式使用的連線資源,您必須具備下列權限:
bigquery.connections.create
bigquery.connections.get
bigquery.connections.list
bigquery.connections.update
bigquery.connections.use
bigquery.connections.delete
如要建立遠端函式,您必須具備與 Cloud Functions 開發人員或 Cloud Run 開發人員角色相關聯的權限。
如要叫用遠端函式,您需要遠端函式中所述的權限。
如要使用遠端函式分析物件資料表,您需要具備物件資料表的
bigquery.tables.getData
權限。
事前準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection API, Cloud Run functions APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection API, Cloud Run functions APIs.
- 請確認您的 BigQuery 管理員已建立連線,並設定 Cloud Storage 存取權。
建立遠端函式
如需建立遠端函式的一般操作說明,請參閱「使用遠端函式」。
建立遠端函式來分析物件資料表資料時,您必須傳入為物件資料表中的物件產生的已簽署網址。您可以使用具有 STRING
資料類型的輸入參數來執行此操作。系統會將已簽署的網址提供給遠端函式,做為 HTTP POST
要求 calls
欄位的輸入資料。要求範例如下:
{
// Other fields omitted.
"calls": [
["https://storage.googleapis.com/mybucket/1.pdf?X-Goog-SignedHeaders=abcd"],
["https://storage.googleapis.com/mybucket/2.pdf?X-Goog-SignedHeaders=wxyz"]
]
}
您可以使用對已簽署網址提出 HTTP GET
要求的方法,讀取遠端函式中的物件。由於經過簽署的網址在查詢字串中包含驗證資訊,因此遠端函式可以存取該物件。
為遠端函式指定 CREATE FUNCTION
陳述式時,建議您將 max_batching_rows
選項設為 1,以避免 Cloud Run 函式逾時並提高處理並行作業。
範例
以下是 Cloud Run 函式 Python 程式碼範例,可讀取儲存空間物件,並將內容長度傳回至 BigQuery:
import functions_framework
import json
import urllib.request
@functions_framework.http
def object_length(request):
calls = request.get_json()['calls']
replies = []
for call in calls:
object_content = urllib.request.urlopen(call[0]).read()
replies.append(len(object_content))
return json.dumps({'replies': replies})
部署後,這個函式會具有類似 https://us-central1-myproject.cloudfunctions.net/object_length
的端點。
以下範例說明如何根據這個 Cloud Run 函式建立 BigQuery 遠端函式:
CREATE FUNCTION mydataset.object_length(signed_url STRING) RETURNS INT64 REMOTE WITH CONNECTION `us.myconnection` OPTIONS( endpoint = "https://us-central1-myproject.cloudfunctions.net/object_length", max_batching_rows = 1 );
如需逐步操作說明,請參閱教學課程:使用遠端函式分析物件資料表。
呼叫遠端函式
如要在物件資料表資料上呼叫遠端函式,請在查詢的 select_list
中參照遠端函式,然後在 FROM
子句中呼叫 EXTERNAL_OBJECT_TRANSFORM
函式,為物件產生已簽署的網址。
以下範例說明一般語句語法:
SELECT uri, function_name(signed_url) AS function_output FROM EXTERNAL_OBJECT_TRANSFORM(TABLE my_dataset.object_table, ["SIGNED_URL"]) LIMIT 10000;
以下範例說明如何僅透過遠端函式處理物件資料表內容的子集:
SELECT uri, function_name(signed_url) AS function_output FROM EXTERNAL_OBJECT_TRANSFORM(TABLE my_dataset.object_table, ["SIGNED_URL"]) WHERE content_type = "application/pdf";
後續步驟
瞭解如何針對圖片物件資料表執行推論。