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

データ分析を導入する: BigQuery 連携クエリの新機能

2023年4月12日
https://storage.googleapis.com/gweb-cloudblog-publish/images/datanalytics2022.max-2500x2500.jpg
Google Cloud Japan Team

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

Google Cloud は、あらゆる運用データと分析データに対応するオープンでインテリジェントな統合型データクラウドを提供します。Cloud StorageCloud Bigtable(NoSQL)、または別のクラウドのいずれにデータが格納されているかにかかわらず、BigQuery を使用して分析クエリをデータに直接実行できます。BigQuery が特に優れている点の一つは、通常であれば運用データベースからデータ ウェアハウスにデータを取り込む際に発生する手間を軽減できることです。Cloud SpannerCloud SQLCloud Bigtable などのフルマネージド型運用データベースを使用しているなら、運用データベースと分析データベースの簡素化と統合に BigQuery を活用できます。

MySQL、PostgreSQL、AlloyDB、Oracle のデータベースから直接 BigQuery にデータを移動する簡便なアプローチの一つは、Datastream for BigQuery を使用することです。Datastream for BigQuery はサーバーレスで使いやすい変更データ キャプチャ レプリケーション サービスであり、Cloud SQL または AlloyDB のデータを BigQuery に同期できます。数千社のお客様が採用しているもう一つのアプローチとして、BigQuery 連携クエリの利用も挙げられます。このツールでは、Cloud SQL または Cloud Spanner のデータの移動に加え、データへのインプレース クエリも可能で、クエリ ステートメントを運用データベースに送信し、結果を BigQuery データとして返すことができます(BigQuery データ型への変換も行われます)。

この投稿では、BigQuery 連携クエリをご利用のお客様である BT Group と MadHive が、データクラウドの統合されたデータ ウェアハウスと運用データベースを活用しているさまざまな方法を見ていきます。併せて、連携クエリの次のような新機能を紹介します。

  • SQL プッシュダウン

  • プライベート IP アクセス

  • Spanner 連携用の優先度キューの設定

  • Spanner から BigQuery JSON 型へのマッピング

連携クエリの活用事例

連携クエリは数千社ものお客様にご利用いただいており、その目的、方法はさまざまです。たとえば、顧客データの規制対象プロジェクトを管理する必要がある金融機関は、連携クエリを使用して計算を運用ストアにプッシュダウンし、集計データのスナップショットを BigQuery に戻してその後の処理を行っています。ネットワーク セキュリティ ベンダーは、BigQuery のスケジュールされたクエリとしてトリガーされる連携クエリへの移行により、数百の ETL ジョブを維持および管理する手間を軽減しています。また、CDC を限定的にしか使用できていなかった医療機関は、BigQuery の運用データへの連携クエリアクセスを準リアルタイムでデータ アナリストに提供できるようになりました。

https://storage.googleapis.com/gweb-cloudblog-publish/images/madhive.max-800x800.jpg

Madhive は最新のテレビ広告を手掛ける大手テクノロジー企業です。同社は BigQuery を大々的に使用し、ペタバイト規模でキャンペーン分析とデータ取り込みを行っています。Madhive は、連携クエリの導入により、Cloud SQL に保存されたデータで ETL パイプラインの大量のデータを拡充しました。データ エンジニアリング チームのリーダーはこう説明しています。「連携クエリを使用すると、BigQuery と Cloud SQL 間のシームレスな統合が実現されるため、データ パイプラインを大幅に簡素化できます。連携クエリはメンテナンスが容易で、追加のツールも不要です。」

https://storage.googleapis.com/gweb-cloudblog-publish/images/bt_group.max-700x700.jpg

BT Group のデジタル部門は、連携クエリについて異なるアプローチを採用しています。ETL に連携クエリを使用するのではなく、データの重複を削減することを重視しました。外部クエリ関数に基づいてビューを作成し、アナリストが BigQuery ビューを介して基盤の運用データベースをクエリできるようにしています。この方法は、後述する新しい SQL プッシュダウン機能のおかげで、ほとんどのユースケースで十分に機能します。重要な点は、これによって少ない労力で速度が向上し、エンジニアリングの作業効率が改善され、チームがより迅速に新規および既存の顧客要件に対応できるようになることです。

BigQuery 連携クエリの新機能

SQL プッシュダウン

SQL プッシュダウンは最適化手法の一つです。これは、BigQuery がフィルタリングなどのオペレーションを自身で実行する代わりに、外部データソース(例: Cloud SQL または Cloud Spanner データベース)に委任するときに行われます。BigQuery に戻す必要があるデータの量が少なくなるため、クエリの総実行時間が短縮されます。また、処理されるデータが少なくなるため、コストを大幅に削減できます。SQL プッシュダウンには、列のプルーニング(SELECT 句)とフィルタ プッシュダウン(WHERE 句)の両方が含まれます。

連携クエリを介して Cloud SQL で生成されるようになった SQL を例に取って、内部的にプッシュダウンがどのように機能するかを見てみましょう。

BigQuery

読み込んでいます...

Cloud SQL - プッシュダウンなし

読み込んでいます...

Cloud SQL - プッシュダウンあり

読み込んでいます...

最初の例は、BigQuery クエリを示しています。ご覧のとおり、Cloud SQL データベースとの通信に EXTERNAL_QUERY 関数が使用されています。2 つ目の例は、プッシュダウンなしで Cloud SQL に送信されるクエリを示しています。これは、ユーザーが指定したクエリそのものです。ソーステーブルに数百万の行と数百の列があり、実際にはそれらの一部しか必要でなかったとしても、このクエリではすべての行と列が BigQuery に送信されます。最後の例は、ユーザーが指定した元のクエリがプッシュダウンでどのように書き換えられるかを示しています。このクエリでは、一部の列と一部の行のみが BigQuery に返されます。

SQL プッシュダウンは、BigQuery で連携クエリを使用する際の柔軟性を高めます。この機能により、BT Group は連携クエリ関数に基づいたビューを配置するだけで、パフォーマンスの高いクロスデータベース クエリを取得することができています。BT Group のデジタル部門がクエリを見直したところ、上記のようなクエリを BigQuery 連携クエリが実行するのに 10 分かかっていたことがわかりました。今では、プッシュダウンのおかげで 26 秒しかかかりません。

現在、SQL プッシュダウンは SELECT * FROM T という形式のクエリにのみ適用されます。これは、その種のクエリがすべての連携クエリの中でかなりの割合を占めているためです。もう一つの制限は、現在のところ、すべてのケースではプッシュダウンがサポートされないことです。たとえば、フィルタ プッシュダウンでは一部のデータ型がサポートされていません。プッシュダウンのクエリおよび型のサポートは拡張していく予定です。今後の情報にご注目ください。

プライベート IP アクセス
多くのお客様は、公共のインターネットから隔離しておく必要がある機密データセットを持っています。今回の新しいリリースにより、プライベート IP を持つインスタンスで連携クエリを使用しつつ、公共のインターネットからデータを隔離できるようになります。

連携に対する Spanner の実行優先度を管理する
Cloud Spanner が提供するリクエスト優先度機能を使用すると、特定のクエリに優先度(高、中、低)を割り当てることができます。連携 BigQuery 接続を介して行われる Spanner へのクエリは、その性質上、大半が分析クエリです。分析クエリは、トランザクション リクエストまたはアプリケーション リクエストとの競合を避けることが肝要である一方、バックグラウンド ジョブやスケジュールされたバックアップよりも優先する必要があります。ほとんどのお客様のユースケースでは、デフォルト設定である「中」の優先度がこの要件を満たします。

しかし、分析クエリによるゲームの中断を避けたいゲーム会社、24 時間年中無休で稼働する必要があるソーシャル メディア プラットフォーム、分析クエリが Spanner のオペレーションと競合するリスクを冒したくない自動車会社から、別の設定に対するリクエストがありました。いかなる代償を払っても運用を優先することが最も重要なこうした例外的な状況では、連携クエリの優先度を「低」に設定できるようになりました。優先度が「低」のジョブは、プリエンプトされてクエリが失敗する原因となる可能性があるため、この設定は慎重に使用してください。

この新機能を使用するクエリのサンプルを次に示します。

読み込んでいます...

Spanner から BQ JSON 型へのマッピング

Spanner と BigQuery は、いずれも JSON を操作できるネイティブ データ型を提供します。Spanner の JSON データ型は運用クエリ向けであり、BigQuery ネイティブ データ型は分析クエリ向けに最適化されているため、両者には元々互換性がありませんでした。しかし、Spanner 用の新しい JSON データ型マッピングの登場により、Spanner JSON 型(Spanner PostgreSQL JSONB 型を含む)は自動的に BigQuery ネイティブ JSON データ型に変換されるようになります。これにより、運用データベースと分析データベースの両方で、半構造化されたスキーマ変更データを操作できます。

開始するには

BigQuery の使用を開始する方法はいくつかあります。新規のお客様には、BigQuery のお支払いに使用できる無料クレジットを $300 分進呈します。すべてのお客様は、10 GB のストレージと 1 か月あたり最大 1 TB のクエリを無料でご利用になれます。クレジットに対する課金はありません。これらのクレジットは、BigQuery の無料トライアルにお申し込みいただくと獲得できます。まだご決断されていない場合は、クレジット カードの登録が不要な BigQuery サンドボックスをぜひお試しください。

BigQuery の連携クエリの詳細については、ドキュメントをご覧ください。Cloud SQL、Cloud Spanner、Cloud Bigtable などの Google Cloud データベースの詳細については、こちらをご覧ください。


- プロダクト マネージャー Christopher Crosbie
- シニア ソフトウェア エンジニア Michał Komorowski
投稿先