はじめに
Google Cloudには、BigQueryやBigtable、BigLakeといった強力なデータ基盤サービスがあります。これらを使いこなすことで、大規模データの分析やリアルタイム処理を効率よく行うことができます。
この記事では、それぞれの特徴や使い分け、クエリ高速化のテクニックをまとめました!
OLAPとOLTPの違い
-
OLAP (Online Analytical Processing)
データ分析や集計に特化し、主に大量の履歴データに対して複雑なクエリを実行する用途に適しています。- BigQuery と BigLake は、OLAP用途に適しています。
-
OLTP (Online Transaction Processing)
リアルタイム性のあるトランザクションデータの処理に最適化されており、正確性やデータ構造の整合性が重視されます。- Bigtable は、OLTP用途に適しています。
トランザクションデータの管理では、スキーマやデータ構造を正しく保つことがとても重要です。
BigQueryの主要コンポーネント
ルーチン
BigQueryでは、よく使う処理をルーチン化して再利用できます。代表的なものは以下の通りです。
-
ストアドプロシージャ
ELT処理など、データ操作後にDMLでテーブルへ書き込む場合に利用されます。 -
ユーザー定義関数 (UDF)
SQL内で呼び出して値を返すカスタム関数。組み込み関数のように使えます。 -
テーブル関数
パラメータを受け取れるビューのような機能で、絞り込みなどが可能です。
マテリアライズドビュー vs 他の技術
| コンポーネント | キャッシング | スケジュールクエリ | 論理ビュー | マテリアライズドビュー |
|---|---|---|---|---|
| パフォーマンス | ◎ | × | × | ◎ |
| クエリの種類 | すべて | すべて | すべて | 一部限定 |
| パーティショニング/クラスタリング | × | ◎ | N/A | ◎ |
| 増分更新 | × | × | × | ◎ |
| 追加ストレージ | × | ◎ | × | ◎ |
| 書き換え | × | × | × | ◎ |
| メンテナンス負荷 | × | ◎ | N/A | ◎ |
| データの古さ管理 | なし | ◎ | なし | 柔軟に管理可 |
- マテリアライズドビューは高パフォーマンスが魅力で、増分更新やクエリの書き換え機能も持ちます。
-
--max_stalenessオプションでデータ鮮度とコストをバランスできます。
承認済みビュー
ビューの参照先データセットに権限がないとクエリエラーになりますが、承認設定を行うと利用者がアクセスできるようになります。
これにより、利用者に見せたいデータのみを安全に公開できます。
クエリパフォーマンスを最大化するコツ
-
WHERE句ではSTRINGやBYTEよりBOOL,INT,FLOAT,DATEを活用 -
REGEXP_CONTAINS()よりLIKEを使う - 不要な列は
SELECTしない - パーティション・クラスタリングを活用
- ネスト(
STRUCT列やREPEATED列)でGROUP BYを減らす -
JOIN前にデータを絞り込む - 長いクエリは一時テーブルを挟む
- 自己結合よりウィンドウ関数の利用を検討
BigLakeの特徴
BigLakeは、外部ストレージへのアクセス権限とテーブル権限を分離し、運用負担を軽減できます。
-
メリット
- 権限管理の簡素化
- ストレージ基盤を意識せず分析可能
- データ移動や複製を不要にし、コスト削減
-
ユースケース
- Twitterでは、1秒間に300万以上の集計を行うパイプラインにBigLakeを活用しています。
Bigtableの特徴
圧倒的なスループットと低レイテンシ
- 単位時間あたりの処理能力が非常に高く、数ミリ秒以下の応答速度を誇ります。
- 即時性が重要な金融やIoT分野の時系列データ処理に強みを発揮します。
BigQueryとの主な違い
- ミリ秒レベルの即時応答が可能
- トランザクション機能を持つ
- リレーションがないため
JOIN不可
設計のポイント
テーブル設計
- 似たスキーマのデータは同一テーブルにまとめる
- 不要なテーブル乱立を避ける
- 逆タイムスタンプを行キーに使う場合は別テーブル化も検討
列ファミリー
- 関連する列は同じファミリーにまとめる
- ガベージコレクションポリシーはファミリー単位で設定
列設計
- 列修飾子を柔軟に使う
- 1行に多すぎる列を持たないよう注意
行・セル設計
- 1行は100MB以内に抑える
- 1セルは10MB以下にする
行キー設計
- 短く、4KB以下に
- 行キー設計で性能が大きく変わるため慎重に!
おわりに
BigQuery・Bigtable・BigLakeの特性を理解し、最適な設計やチューニングを行うことで、パフォーマンス向上と運用コスト削減を同時に実現できます。
それぞれのユースケースに応じて柔軟に使い分けていくことが大切です。