コンテンツに移動
データ分析

BigQuery ObjectRef のご紹介: マルチモーダル データと AI 処理の強化

2025年7月10日
Jamy Su

Product Manager

Gaurav Soni

Engineering Manager

※この投稿は米国時間 2025 年 6 月 26 日に、Google Cloud blog に投稿されたものの抄訳です。

従来のデータ ウェアハウスは、今日の分析ワークロードにまったく対応できていません。今や生成されるデータのほとんどが非構造化データであり、マルチモーダル(ドキュメント、音声ファイル、画像、動画)であるのがその理由です。非構造化データのクリーニングと変換は複雑で、これまでは非構造化データと構造化データ、および分析のユースケースと AI / ML のユースケースに対して、データ パイプラインをサイロ化して維持しておく必要がありました。このような断片化されたデータ プラットフォーム間では、データアクセスが制限される、データ利用に時間がかかる、情報が古いなどの問題があり、データの可能性を最大限に引き出すのは簡単ではありません。また、同様の問題が、企業の AI イニシアチブの妨げにもなっています。

今回は、BigQuery のプレビュー版で利用できるようになった新しいデータ型、ObjectRef をご紹介します。ObjectRef は、URI と追加のメタデータを使用して Cloud Storage 内の任意のオブジェクトへの参照を表すものです。ObjectRef は、Cloud Storage 内にある非構造化データ オブジェクトの読み取り専用テーブルであるオブジェクト テーブルを補完し、画像や音声などの非構造化データを既存の BigQuery テーブルに統合します。ObjectRef データ型は、あらゆるモダリティ データを処理するための統合された、マルチモーダルかつ管理された方法を提供し、データ処理とアクセス制御における断片化を解消します。表形式データの処理と同じ SQL スクリプトまたは Python スクリプトを使用して、大規模言語モデル(LLM)、ML モデル、オープンソースの Python ライブラリで非構造化データを処理できます。また、さまざまなデータ エンジニアリング ステージ、すなわち抽出、読み込み、変換(extract、load、transform: ELT)を通じて構造化データと非構造化データを同じ行に保存し、同様のアクセス制御モデルを使用して管理することも可能です。

たとえば、「先月、やり取りの中でパフォーマンスの問題について苦情を申し立てた顧客のうち、収益が高い顧客上位 10 名を教えて」という質問があるとします。これに答えるには、音声通話、メール、オンライン チャットの文字起こしに対して自然言語処理(NLP)を実行し、データを正規化して、やり取りの中で「パフォーマンスの問題」について話し合われたかどうかを特定し、さらにその顧客が苦情を申し立てたかどうかを検出する必要があります。これらの各ステップについて、Cloud Storage 内のデータ上にパイプラインを構築する方法、データに対して AI / ML モデルを実行する方法、モデルをホストする方法(Compute Engine、Google Kubernetes Engine、Vertex AI など)を決定し、その後、正規化および抽出したデータを構造化された形式(BigQuery テーブルなど)で保存し、各顧客の収益データと結合する必要があります。

ObjectRef のリリースにより、この質問に簡単な SQL クエリを使って回答できるようになりました。コールセンターの音声ファイルとオペレーターのチャット テキストを 1 つの BigQuery テーブル customer_interactions に結合したとします。このテーブルには、ObjectRef 型の audio_ref 列(1)と STRING 型の chat 列(2)があります。パフォーマンスの問題について苦情を申し立てたお客様をフィルタするには、WHERE 句に条件を 1 つ追加するだけで済みます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_-_example_business_question.max-1900x1900.png

ObjectRef を使用した BigQuery では、データと AI 全体で独自のプラットフォーム機能を活用できます。

  • マルチモダリティ: ObjectRef を使用して、構造化(表形式)データ、非構造化データ、およびその両方の組み合わせを 1 つのテーブルでネイティブに処理します。これで、構造化データと非構造化データの両方を処理するマルチモーダル ELT データ パイプラインを構築できるようになります。

  • SQL と Python をフルサポート: 相互運用性を心配することなく、お好みの言語を使用できます。SQL で動作するものは Python(BigQuery DataFrames 経由)でも動作し、その逆も同様です。オブジェクトの変換、変換されたオブジェクトの Cloud Storage への保存、その他の集計やフィルタリングはすべて、1 つの SQL スクリプトまたは Python スクリプトで実行できます。

  • 生成 AI 対応、サーバーレス、自動スケーリングのデータ処理: インフラストラクチャの管理に煩わされることなく、データ パイプライン構築に集中できます。LLM で非構造化データを処理したり、好みのオープンソース ライブラリでサーバーレスの Python UDF を使用したりできます。エンベディングの作成、プロンプトを使用した要約の生成、Vertex AI ジョブへの入力としての BigQuery テーブルの使用など、さまざまな処理が可能です。

  • 統合ガバナンスとアクセス制御: きめ細かいアクセス制御、データ マスキング、接続委任アクセスなど、使い慣れた BigQuery のガバナンス機能を非構造化データでも使用できます。構造化データと非構造化データで別個のガバナンス モデルを管理する必要はありません。
https://storage.googleapis.com/gweb-cloudblog-publish/images/2_-_architecture.max-2200x2200.png

bjectRef の活用例

ObjectRef データ型の使用方法について詳しく見ていきましょう。

ObjectRef とは

まず、ObjectRef の仕組みを理解しておきます。簡単に言うと、ObjectRef はオブジェクト ストレージとアクセス制御のメタデータを含む STRUCT です。今回のリリースにより、オブジェクト テーブルを作成すると、「ref」という名前の新しい ObjectRef 列が追加されます。

読み込んでいます...

ObjectRefs を使用して BigQuery テーブルを作成する

標準の BigQuery テーブルである ingestion.sessions に構造化された情報を保存し、Cloud Storage バケットに通話音声を保存するコールセンターを考えてみましょう。Cloud Storage バケットには、BigQuery オブジェクト テーブルの ingestion.audios が作成されています。この例は音声をベースとしたものですが、ObjectRefs は画像、ドキュメント、動画を表すこともできます。

次の図で、赤でハイライト表示されているのが ObjectRefs です。

https://storage.googleapis.com/gweb-cloudblog-publish/images/3_-_separate_tables.max-1000x1000.png

ObjectRef を使用すると、sessions.RecordingID 列と audios.Ref.uri 列で 2 つのテーブルを結合して、1 つの BigQuery テーブルを作成できます。新しいテーブルには、ingestion.audios テーブルの Ref 列を使用して、ObjectRef 型の Audio 列を含めます。

lang-sql
読み込んでいます...
https://storage.googleapis.com/gweb-cloudblog-publish/images/image2_2lT3lHF.max-1000x1000.png

オブジェクトのバージョンをキャプチャすることで、BigQuery の analysis.sessions に対するゼロコピー スナップショットクローンが、構造化データと非構造化データの両方で再現可能かつ一貫性を保てるようになります。これにより、ML トレーニングや LLM ファインチューニングなどのダウンストリーム アプリケーションで再現性が確保されます。

ObjectRef は STRUCT であるため、ARRAY 内のネストもサポートしています。Audio で表されるメインの音声ファイルはチャンク化できます(オペレーター ID ごとのセグメントに分割するなど)。その結果のオブジェクトは、ARRAY<ObjectRef> タイプの新しい列 Chunked で表されます。これにより、チャンクの順序が保持され、同じ行のメインの音声ファイルとともに保存されます。このデータ変換により、通話ごとのオペレーターの引き継ぎ回数を記録し、各通話セグメントを個別に分析できるようになります。

https://storage.googleapis.com/gweb-cloudblog-publish/images/image4_cdUoHFw.max-1000x1000.png

サーバーレス Python を使用して処理

Python UDF の統合により、お気に入りのオープンソース Python ライブラリをユーザー定義関数(UDF)として BigQuery に取り込むことができます。ソース ObjectRef から構造化データと非構造化データを簡単に導出して、同じ行に保存できます。

OBJ.GET_ACCESS_URL(ref ObjectRef, mode STRING) -> ObjectRefRuntime という新しい関数を使用すると、Cloud Storage 内のオブジェクトへのアクセス権の委任が可能になります。ObjectRefRuntime は、データの読み取りと書き込みのための署名付き URL を提供します。これにより、ガバナンスとアクセス制御をすべて BigQuery で管理できるようになり、Cloud Storage のアクセス制御が不要になります。

サーバーレス Python のユースケース 1: マルチモーダル データから構造化データへ

たとえば、analysis.sessions テーブルにあるすべての音声ファイルの再生時間を取得したいとします。ここで、Python UDF 関数の analysis.GET_DURATION(object_ref_runtime_json STRING) -> INT は BigQuery に登録済みであると仮定します。GET_DURATION は、ObjectRefRuntime からの署名付き URL を使用して Cloud Storage バイトを読み取ります。

lang-sql
読み込んでいます...
lang-py
読み込んでいます...

サーバーレス Python のユースケース 2: マルチモーダル データから処理済みマルチモーダル データへ

別の例として、Python UDF 関数の analysis.DENOISE(src_object_ref_runtime_json STRING, dst_object_ref_runtime_json STRING)-> object_ref_runtime_json STRING が BigQuery に登録済みであると仮定して、analysis.sessions テーブルにあるすべての音声ファイルからノイズを除去する方法を説明します。この関数は、ソース音声から読み取り、ノイズが除去された新しい音声を Cloud Storage に書き込み、新しい音声ファイルの ObjectRefs を返します。

ObjectRefRuntime は、オブジェクト バイトの読み取りと書き込みのための署名付き URL を提供します。

lang-sql
読み込んでいます...
lang-py
読み込んでいます...

Gemini と BigQuery ML を使用した処理

AI.GENERATEML.GENERATE_TEXTML.GENERATE_EMBEDDING などのすべての BigQuery ML 生成 AI 関数が、ObjectRefs を完全にサポートするようになりました。これにより、さまざまなユースケースが可能となります。

BQML ユースケース 1: Gemini を使用したマルチモーダル推論推論用として、同じ Gemini プロンプトで複数の ObjectRef を渡せるようになりました。

ここでは、Gemini を使用して、元の音声ファイルとノイズ除去後の音声ファイルを比較することで、ノイズ除去の品質を評価します。このスクリプトは、ノイズが低減された音声ファイル ObjectRef がすでに Denoised 列に保存されていることを前提としています。

lang-sql
読み込んでいます...
lang-py
読み込んでいます...

As another example, here’s how to transcribe the Audio file using Gemini.

lang-sql
読み込んでいます...
lang-py
読み込んでいます...

BQML + Gemini を使用すると、マルチモーダル推論から構造化された結果や半構造化された結果を生成することもできます。たとえば、Gemini を使用して 音声ファイルで話者ダイアライゼーション(発言者の識別・分離)を行い、オペレーターと顧客を識別できます。

lang-sql
読み込んでいます...
lang-py
読み込んでいます...

BQML のユースケース 2: Gemini を使用したマルチモーダル エンベディング

ML.GENERATE_EMBEDDING のサポートにより、テキスト エンベディング モデルとマルチモーダル エンベディング モデルで ObjectRefs を使用してベクトル インデックスを作成し、RAG ワークフローを強化して LLM をグラウンディングできます。

画像の ObjectRefs を含む ref 列のあるオブジェクト テーブル、ingestion.images があるとします。

lang-sql
読み込んでいます...
lang-py
読み込んでいます...

最新情報

まとめると、BigQuery を使用して非構造化データやマルチモーダル データを分析するための新しい機能は次のとおりです。

  • マルチモーダル データ(ドキュメント、音声ファイル、画像、動画)を処理するための新しいデータ型と関数: 

    • ObjectRef 型と ObjectRefRuntime 型、および新しい関数: OBJ.MAKE_REFOBJ.GET_ACCESS_URLOBJ.FETCH_METADATA

  • オブジェクト テーブルの機能強化:

    • スケーラビリティ: オブジェクト テーブルで Cloud Storage バケットの一貫したビューがサポートされるようになり、テーブルあたりのオブジェクト数が 6,500 万から 3 億以上に 5 倍にスケールアップしました。1 テーブルにつき 1 時間ごとに最大 100 万件のオブジェクト変更を取り込むこともできます

    • ObjectRef との相互運用: 新しい ref 列により、オブジェクト テーブルから直接、事前構築された ObjectRef が提供されます

  • BQML の生成 AI マルチモーダル機能:

    • ML.GENERATE_TEXTAI.GENERATE_TABLE の TVF、および AI.GENERATEAI.GENERATE_BOOL などのスカラー関数で、Gemini の同じプロンプトに複数のオブジェクトを ObjectRef を使用してカプセル化することで、マルチモーダル推論をサポートします。オブジェクトは、さまざまな列や複合型(配列など)から取得できます。

    • ML.GENERATE_EMBEDDING 関数を介した ObjectRef のエンベディングをサポートします

  • BigQuery DataFrames のマルチモーダル DataFrame サポート:

    • 非構造化データ(ObjectRef を利用)を別の列として含めるための pandas に似たデータフレームの拡張機能

    • 使い慣れたデータフレーム操作で、混在するモダリティ データの入手、処理、フィルタリングが可能です

    • サーバーサイド処理関数と BQML を通じて利用できる、チャンク化、画像処理、文字起こしなどの非構造化データ用の特別なトランスフォーマー

  • Python UDF のサポート:

    • BigQuery ガバナンスによるフルマネージドのサーバーレス環境で、豊富な Python ライブラリ エコシステムを活用して高度な非構造化データ操作を実現します

https://storage.googleapis.com/gweb-cloudblog-publish/images/flow_chart.max-2200x2200.png

使ってみる

ObjectRef のプレビュー版がリリースされました。まずは、次の簡単な手順に沿ってご確認ください。

  1. 詳細を動画で確認する - Cloud Next のライブデモで、非構造化データと構造化データの統合LLM を使用したテキストの生成とベクトル検索の実行についてご覧ください。

  2. 実践で学ぶ - SQL または Python のチュートリアルを使用して、このマルチモーダル データ チュートリアルObjectRef を試してみましょう。

  3. ユースケースを構築する - 分析する非構造化データを含む Cloud Storage バケットを見つけます。オブジェクト テーブルを作成するか、Cloud Storage の自動検出を設定して、このデータを BigQuery に取り込みます。オブジェクト テーブルに ObjectRefs の列が含まれるようになり、これでデータ変換を開始する準備が整いました。

-プロダクト マネージャー、Jamy Su
-エンジニアリング マネージャー Gaurav Soni

 

投稿先