テーブル スキーマで ObjectRef 列を指定する
このドキュメントでは、ObjectRef
値を格納できる列を使用して BigQuery 標準テーブル スキーマを定義する方法について説明します。
ObjectRef
値は、Cloud Storage 内のオブジェクトのメタデータと接続情報を提供します。非構造化データを標準テーブルに統合する必要がある場合は、ObjectRef
値を使用します。たとえば、products テーブルで、ObjectRef
値を含む列を追加すると、商品画像を他の商品情報と同じ行に保存できます。ObjectRef
値は、ObjectRef
形式(STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>
)を使用する STRUCT
列に格納できます。
マルチモーダル データの操作の詳細については、マルチモーダル データを分析するをご覧ください。ObjectRef
データを操作する方法については、SQL でマルチモーダル データを分析するをご覧ください。Python でマルチモーダル データを操作する方法については、BigQuery DataFrames を使用して Python でマルチモーダル データを分析するをご覧ください。
前提条件
標準テーブルに ObjectRef
値を入力して更新するには、関連する Cloud Storage オブジェクトの URI 情報を含む STRING
列がテーブルに存在している必要があります。
ターゲット標準テーブルの URI データで識別されるオブジェクトと同じオブジェクトを含む Cloud Storage バケットが必要です。オブジェクト テーブルを使用して標準テーブルに ObjectRef
値を保持する場合は、そのバケット内のオブジェクトを表すオブジェクト テーブルも必要です。
ObjectRef
値の維持
オブジェクト テーブルを使用して、標準テーブルに ObjectRef
値を入力して更新できます。プレビューの許可リストに登録されている場合、作成するオブジェクト テーブルには、特定のオブジェクトの ObjectRef
値を含む ref
列があります。オブジェクト URI を使用して標準テーブルをオブジェクト テーブルに結合し、ObjectRef
値を入力して更新できます。Cloud Storage からオブジェクト メタデータを取得する必要がないため、スケーラビリティのためにこの方法をおすすめします。
オブジェクト テーブルを作成したくない場合は、OBJ.FETCH_METADATA
関数と OBJ.MAKE_REF
関数を使用して、Cloud Storage からオブジェクト メタデータを直接取得し、ObjectRef
値を入力して更新できます。このアプローチでは、Cloud Storage からオブジェクト メタデータを取得する必要があるため、スケーラビリティが低下する可能性があります。
ObjectRef
列を作成する
標準テーブルに ObjectRef
列を作成して入力するには、次のいずれかのオプションを選択します。
オブジェクト テーブル
オブジェクト テーブルの ref
列のデータに基づいて ObjectRef
列を作成して入力します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
CREATE OR REPLACE TABLE PROJECT_ID.DATASET_ID.TABLE_NAME AS SELECT TABLE_NAME.*, OBJECT_TABLE.ref AS objectrefcolumn FROM DATASET_ID.TABLE_NAME INNER JOIN DATASET_ID.OBJECT_TABLE ON OBJECT_TABLE.uri = TABLE_NAME.uri;
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。現在のプロジェクトでテーブルを作成する場合は、この引数をスキップできます。DATASET_ID
: 作成するデータセットの ID。TABLE_NAME
: 再作成する標準テーブルの名前。OBJECT_TABLE
: 標準テーブルに統合するオブジェクトデータを含むオブジェクト テーブルの名前。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
SQL 関数
OBJ.FETCH_METADATA
関数と OBJ.MAKE_REF
関数の出力に基づいて ObjectRef
列を作成して入力します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
CREATE OR REPLACE TABLE PROJECT_ID.DATASET_ID.TABLE_NAME AS SELECT TABLE_NAME.*, OBJ.FETCH_METADATA(OBJ.MAKE_REF(uri, 'CONNECTION_ID')) AS objectrefcolumn FROM DATASET_ID.TABLE_NAME;
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。現在のプロジェクトでテーブルを作成する場合は、この引数をスキップできます。DATASET_ID
: 作成するデータセットの ID。TABLE_NAME
: 再作成する標準テーブルの名前。CONNECTION_ID
: サービスが Cloud Storage 内のオブジェクトにアクセスするために使用できるクラウド リソース接続を含むSTRING
値(location.connection_id
形式)。例:us-west1.myconnection
。接続 ID は、 Google Cloud コンソールで接続の詳細を表示し、[接続 ID] に表示される完全修飾接続 ID の最後のセクションの値をコピーすることで取得できます。例:projects/myproject/locations/connection_location/connections/myconnection
。オブジェクトへのアクセスに使用している Cloud Storage バケットのサービス アカウントに、ストレージ オブジェクト ユーザー(
roles/storage.objectUser
)ロールを付与する必要があります。接続は、関数を呼び出すクエリと同じプロジェクトとリージョンに存在する必要があります。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
ARRAY<ObjectRef>
列を作成する
ARRAY<STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>>
列を作成して、ObjectRef
値の配列を含めることができます。たとえば、動画を個別の画像に分割し、これらの画像を ObjectRef
値の配列として保存できます。
ARRAY_AGG
関数を使用して、ObjectRef
値の配列を集計できます。必要に応じて、ORDER BY
句を使用してオブジェクトの順序を保持することもできます。UNNEST
演算子を使用して、ObjectRef
値の配列を個々の ObjectRef
値に解析できます。必要に応じて、WITH OFFSET
句を使用してオブジェクトの順序を保持することもできます。URI パスやオブジェクト ファイル名などのオブジェクト メタデータを使用して、オブジェクト チャンクを表す ObjectRef
値を、元のオブジェクトを表す ObjectRef
値にマッピングできます。
ObjectRef
値の配列を操作する方法の例については、SQL でマルチモーダル データを分析するチュートリアルの ARRAY<ObjectRef>
値を使用して順序付きマルチモーダル データを処理するをご覧ください。
ObjectRef
列を更新する
標準テーブルの ObjectRef
列を更新するには、次のいずれかのオプションを選択します。
オブジェクト テーブル
オブジェクト テーブルの ref
列のデータを使用して、ObjectRef
列を更新します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
UPDATE PROJECT_ID.DATASET_ID.TABLE_NAME SET objectrefcolumn = (SELECT ref FROM DATASET_ID.OBJECT_TABLE WHERE OBJECT_TABLE.uri = TABLE_NAME.uri) WHERE uri != "";
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。現在のプロジェクトでテーブルを作成する場合は、この引数をスキップできます。DATASET_ID
: 作成するデータセットの ID。TABLE_NAME
: 再作成する標準テーブルの名前。OBJECT_TABLE
: 標準テーブルのObjectRef
列と同じオブジェクト データを含むオブジェクト テーブルの名前。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
SQL 関数
OBJ.FETCH_METADATA
関数と OBJ.MAKE_REF
関数からの出力を使用して、ObjectRef
列を更新します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
UPDATE PROJECT_ID.DATASET_ID.TABLE_NAME SET objectrefcolumn = (SELECT OBJ.FETCH_METADATA(OBJ.MAKE_REF(uri, 'CONNECTION_ID'))) WHERE uri != "";
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。現在のプロジェクトでテーブルを作成する場合は、この引数をスキップできます。DATASET_ID
: 作成するデータセットの ID。TABLE_NAME
: 再作成する標準テーブルの名前。CONNECTION_ID
: サービスが Cloud Storage 内のオブジェクトにアクセスするために使用できるクラウド リソース接続を含むSTRING
値(location.connection_id
形式)。例:us-west1.myconnection
。接続 ID は、 Google Cloud コンソールで接続の詳細を表示し、[接続 ID] に表示される完全修飾接続 ID の最後のセクションの値をコピーすることで取得できます。例:projects/myproject/locations/connection_location/connections/myconnection
。オブジェクトへのアクセスに使用している Cloud Storage バケットのサービス アカウントに、ストレージ オブジェクト ユーザー(
roles/storage.objectUser
)ロールを付与する必要があります。接続は、関数を呼び出すクエリと同じプロジェクトとリージョンに存在する必要があります。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。