使用遠端函式分析物件資料表

本文件說明如何使用遠端函式,分析物件資料表中的非結構化資料。

總覽

您可以使用遠端函式,分析物件資料表所代表的非結構化資料。遠端函式可讓您呼叫在 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 權限。

事前準備

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery, BigQuery Connection API, Cloud Run functions APIs.

    Enable the APIs

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

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery, BigQuery Connection API, Cloud Run functions APIs.

    Enable the APIs

  8. 請確認您的 BigQuery 管理員已建立連線,並設定 Cloud Storage 存取權
  9. 建立遠端函式

    如需建立遠端函式的一般操作說明,請參閱「使用遠端函式」。

    建立遠端函式來分析物件資料表資料時,您必須傳入為物件資料表中的物件產生的已簽署網址。您可以使用具有 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";

    後續步驟

    瞭解如何針對圖片物件資料表執行推論