テーブル スキーマで ObjectRef 列を指定する
このドキュメントでは、ObjectRef
値を格納できる列を使用して BigQuery 標準テーブル スキーマを定義する方法について説明します。
ObjectRef
値は、Cloud Storage 内のオブジェクトのメタデータと接続情報を提供します。非構造化データを標準テーブルに統合する必要がある場合は、ObjectRef
値を使用します。たとえば、商品テーブルで、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 バケットの接続のサービス アカウントに、Storage オブジェクト ユーザー(
roles/storage.objectUser
)ロールを付与する必要があります。接続は、関数を呼び出すクエリと同じプロジェクトとリージョンに存在する必要があります。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
ARRAY<ObjectRef>
列を作成する
ObjectRef
値の配列を含む ARRAY<STRUCT<uri STRING, version STRING, authorizer STRING, details JSON>>
列を作成できます。たとえば、動画を個別の画像にチャンク分割し、これらの画像を 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 バケットの接続のサービス アカウントに、Storage オブジェクト ユーザー(
roles/storage.objectUser
)ロールを付与する必要があります。接続は、関数を呼び出すクエリと同じプロジェクトとリージョンに存在する必要があります。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。