リモート関数を使用してオブジェクト テーブルを分析する
このドキュメントでは、リモート関数を使用して、オブジェクト テーブルの非構造化データを分析する方法について説明します。
概要
リモート関数を使用して、オブジェクト テーブルで表される非構造化データを分析できます。リモート関数を使用すると、Cloud Functions または Cloud Run で実行されている関数を呼び出して、次のようなリソースにアクセスするようにプログラムできます。
- Google の事前トレーニング済み AI モデル(Cloud Vision API や Document AI など)。
- Apache Tika などのオープンソース ライブラリ。
- 独自のカスタムモデル。
リモート関数を使用してオブジェクト テーブルのデータを分析するには、リモート関数を呼び出すときに、オブジェクト テーブル内のオブジェクトの署名付き URL を生成して渡す必要があります。これらの署名付き URL によって、リモート関数にオブジェクトへのアクセス権が付与されます。
必要な権限
リモート関数が使用する接続リソースを作成するには、次の権限が必要です。
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 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 Functions APIs.
- BigQuery 管理者が接続を作成済みで、Cloud Storage へのアクセスを設定していることを確認します。
リモート関数を作成する
リモート関数を作成する一般的な手順については、リモート関数の操作をご覧ください。
オブジェクト テーブルデータを分析するリモート関数を作成する場合は、オブジェクト テーブル内のオブジェクトに対して生成された署名付き URL を渡す必要があります。これを行うには、STRING
データ型の入力パラメータを使用します。署名付き URL は、リモート関数で 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"]
]
}
署名付き URL に HTTP GET
リクエストを送信するメソッドを使用すると、リモート関数内のオブジェクトを読み取ることができます。署名付き URL のクエリ文字列に認証情報が含まれているため、リモート関数はオブジェクトにアクセスできます。
リモート関数の CREATE FUNCTION
ステートメントを指定する場合は、Cloud Functions のタイムアウトを回避し、並列処理を増やすために max_batching_rows
オプションを 1 に設定することをおすすめします。
例
次の Cloud Functions 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 Functions の関数に基づいて 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
関数を呼び出して、オブジェクトの署名付き URL を生成します。
次の例は、一般的なステートメントの構文を示しています。
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";