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

BigQuery マルチステートメント トランザクションの一般提供開始のお知らせ

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

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

支払いやロジスティクスなど、さまざまなビジネス オペレーションをサポートする今日の企業にとって、トランザクションはミッション クリティカルです。また、分析ファーストおよびデータドリブンであることが重視される昨今において、複雑なトランザクションを信頼性の高い方法で処理することが求められるのは、従来の OLTP データベースだけではありません。今日の企業にとって、分析環境におけるトランザクション データ処理の ACID 特性(アトミック(不可分)性、整合性、独立性、永続性)が信頼できるものであることも必要です。そこで BigQuery は、多数のテーブルにまたがる DML ステートメントを 1 つのトランザクションでサポートし、成功した場合は関連する変更をアトミックに(すべて一度に)commit し、失敗した場合はアトミックにロールバックする機能を提供することにしました。本日は、一般提供が最近開始された BigQuery 内のマルチステートメント トランザクションとそれによって可能になる新しいビジネス機能についてご案内します。

プレビュー期間中、BigQuery マルチステートメント トランザクションは、OLTP 環境に保存されたデータと BigQuery の同期の維持、BigQuery に事前に取り込まれたイベントの複雑な後処理、GDPR の忘れられる権利の遵守などのお客様のユースケースにおいて非常に効果的でした。Google のお客様の一社である PLAID は、同社のカスタマー エクスペリエンス プラットフォームである KARTE 内でマルチステートメント トランザクションを活用し、ウェブサイトの訪問者とアプリケーション ユーザーの行動と感情を分析して、企業が適切な情報をリアルタイムで提供できるようにするとともに、データの力で人の価値を最大化するという PLAID の使命を推進しています。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Plaid_logo.max-600x600.png

「当社にとってマルチステートメント トランザクションは、高速で表現力に優れた分析を実現する貴重な機能です。開発者は、クエリをシンプルに保ってエラー処理の煩わしさを軽減でき、ユーザーは、信頼できる結果を常に得ることができます。」 リード プロダクト エンジニア 小川拓也氏

マルチステートメント トランザクションの一般提供が開始されたことで、お客様はビジネス クリティカルなトランザクションを単一のトランザクション内で包括的に処理する、本番環境に対応した手段を得るのみでなく、プレビュー期間に提供されたものをはるかに上回るスケーラビリティも手に入れることができるようになりました。マルチステートメント トランザクションの一般提供に際して、トランザクションあたり最大 10 万個のテーブル パーティションの変更と、最大 100 個のテーブルの変更がサポートされるようになりました。テーブル パーティション数にして 10 倍、テーブル数にして 2 倍のこのスケールは、トランザクションで commit されたメタデータのサイズを最適化する、トランザクション commit プロトコルを入念に再設計することによって可能になりました。

マルチステートメント トランザクションの一般提供では、BigQuery セッションおよび手続き型言語スクリプトとの完全な互換性も導入されています。セッションは状態を保存し、一時テーブルと変数の使用を可能にするという利点があり、マルチステートメント トランザクションと組み合わせれば複数のクエリにわたって実行できます。手続き型言語スクリプトでは、IF … THEN および WHILE ループなどのプログラミング構造を使用して、共有状態や複雑なロジックとともに複数のステートメントを連続して実行できます。

たとえば、現在のマルチステートメント トランザクションの例を強化する必要があるとします。この例では、ある小売業者の既存の在庫と新着商品の供給をアトミックに管理するためにトランザクションが使用されています。現在の手持ち在庫をモニタリングしている小売業者は、在庫が多くなりすぎたときにセールス オファーで販売を促進する必要のある品目をセールスチームに自動的に提案する機能を追加したいと考えています。これを行うには、現在の在庫と新着商品の供給をモニタリングし、全体的な在庫レベルに基づいて新しい PromotionalSales テーブルを変更する、シンプルな手続き型 IF ステートメントを含めます。では、単一のトランザクションとして結果をセールスチームに commit する前に、セッションを使用して結果を検証してみましょう。これを SQL で行う方法を見ていきます。

まず、DDL ステートメントを使用してテーブルを作成します。

読み込んでいます...

次に、Inventory テーブルと NewArrivals テーブルに値をいくつか挿入します。

読み込んでいます...

続いて、マルチステートメント トランザクションと手続き型言語スクリプトを使用して、NewArrivals テーブルを Inventory テーブルとアトミックに結合し、過剰在庫を考慮に入れて PromotionalSales テーブルを作成します。また、これをセッション内で作成することによって、ステートメントを他のユーザーに commit する前にテーブルを検証できるようにします。

読み込んでいます...

SELECT ステートメントの結果から、warehouse #1 に到着した商品が在庫に正常に追加され、過剰在庫の内容が PromotionalSales テーブルに正しく反映されていることがわかります。これらのトランザクションは commit する準備ができているようです。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Blog_Image_2.max-2000x2000.jpg

一方、予想される結果に問題があった場合に、作成したセッション外で他のユーザーがテーブルをクエリしても、変更は適用されていません。結果を検証し、必要に応じて他のユーザーに影響を与えることなくロールバックできる機能は、このために用意されています。

読み込んでいます...

Inventory、NewArrivals、PromotionalSales の各テーブルが正しいことを検証したら、構成済みのセッションに戻り、セッション内でマルチステートメント トランザクションを commit します。これにより、変更がセッション外にも伝播されるようになります。

読み込んでいます...

https://storage.googleapis.com/gweb-cloudblog-publish/images/Blog_Image_3.max-2000x2000.jpg

すべてのユーザーの PromotionalSales テーブルが更新され、過剰在庫に対処するためにどの商品の販売を促進すべきかについてのアイデアがセールスチームに提供されます。

読み込んでいます...

https://storage.googleapis.com/gweb-cloudblog-publish/images/Blog_Image_4.max-2000x2000.jpg

このようにマルチステートメント トランザクションは、簡単に使用できて拡張性に優れ、特に他の BigQuery 機能と組み合わせたときに威力を発揮します。ぜひご自分でお試しになり、機能をご確認ください。


- BigQuery プロダクト マネージャー Nick Orlove
- BigQuery ソフトウェア エンジニア Hua Zhang

投稿先