こんにちは。
データ分析基盤チームリーダーのT.Y.です。
私達のチームでは、RDB等のデータソースからBigQueryに連携させてデータウェアハウスやデータマートを構築しています。
今回、RDBからBigQueryにDatastreamを用いて連携しているテーブルを、パーティショニングした事例を紹介します。
背景
以前の記事にて紹介した通り、当社でのCloud SQLからBigQueryへの接続にはDatastreamを利用しています。
構成について記述している以前の記事はこちらです。
本構成の中でDatastreamを利用して接続しているテーブルには様々な種類があります。
その中でも、日次で数万レコードが追加され、1億弱のレコードがあるような当社比でサイズが大きなテーブルの利用頻度が高い状態でした。
このテーブルを、Looker Studioに接続するなどして可視化した際に、クエリ実行した際のコストの高さが課題でした。
テーブルには10年ほどのデータが記録されている一方、高頻度で分析に利用するのは直近1年以内のデータであり、当然テーブルのパーティショニングを検討することとなります。
まずはドキュメントを読んで実装しました
Google Cloud公式のドキュメントは以下です。
「Datastream を使用して BigQuery のパーティション分割テーブルにデータを取り込む」https://cloud.google.com/datastream/docs/best-practices-partitioned-tables
本記事を記述する以前に、このドキュメントを見ながら実装しました。
テーブルのパーティショニングはでき、コンソール画面では確かにDAY単位でパーティショニングできている表示となりました。
ところが、このテーブルに対してクエリを実行したところ、想定していたクエリコスト削減が実現できていませんでした。
パーティショニングで指定したカラムの条件を指定することで、捜査範囲が絞られる(プルーニングされる)想定でしたが、そうはならなかったのです。
(参考)プルーニングについて
https://cloud.google.com/bigquery/docs/querying-partitioned-tables
実行グラフにおける読み取り元テーブルとmax_stalenessオプションの設定
インターネット上の先駆者や、Google Cloud コミュニティ内の記事も探してみたものの、解決に至る決定的な内容にはなかなか出会えませんでした。
それでも、何か解決策がないかプルーニングされないクエリの結果を実行グラフから確認すると、怪しそうな点が見えてきました。
実行グラフでは、DELTA_CDC_TABLE_{テーブル名} テーブルからデータを読み取っていたのです。
このテーブルは、名前から推測するにCDCの変更差分であり、パーティショニングしたテーブルから読み取っていません。
このDELTAテーブルに最新の変更が記録されているのでしょう。
パーティショニング設定をしていないテーブルでは、DELTA_CDCテーブルではなく、作成したテーブルから読み取っていました。
どうやら、常に最新の変更を取得している、ということが分かりました。
Datastreamでは、更新頻度を設定していたのに、おかしそうだ、と気付いた私は、以下のドキュメントにたどり着きました。
https://cloud.google.com/bigquery/docs/change-data-capture
そして、テーブルを確認するとこのドキュメントにて言及されている、max_stalenessオプションの指定がなされていなかったのです。
Datastreamの宛先追加によって自動でテーブルが作成される際には、Datastreamにて設定したmax_staleness オプションの値がBigQueryのテーブルに適用されます。
しかし、Datastreamの連携前に事前にテーブルを作成した場合、後から宛先追加をしてもmax_stalenessオプションの設定が入らないようです。
以下のクエリで、max_stalenessオプションを設定すると、読み取り元がパーティショニングしたテーブルに変わり、クエリコストも大きく下がりました。
ALTER TABLE {table_name}
SET OPTIONS (
max_staleness = INTERVAL 15 MINUTE);
まとめ
今回の記事と同様の内容を試みた記事はいくつかありましたが、Datastreamのみでクエリ実行時のプルーニングまで実現できている例がなかったため苦戦しました。
Datastreamは、サービス開始からまだ3年ほどであり、課題の解決事例もまだ多いとは言えません。
しかし、RDBからBigQueryへのデータ連携実現のためには、上位の選択肢に入ると思います。
当社では、引き続きDatastreamを活用しながら、MySQLとBigQueryとの連携を進める予定です。
レイスシステムソリューションズ株式会社のソフトウェア開発や、
採用に関するお問い合わせについては、下記のリンクにてお問い合わせください。
-1.png)



