はじめに
こんにちは。GMOアドマーケティングのKONCEです。
弊社ではDWHとしてBigQueryを採用しております。
GCPを運用する上で日々コストを気にしていますが、先日 Google Cloud release notes にて「BigQuery のパーティショニングとクラスタリングの Recommender」という気になるプレビューが追加されていたので今回はそれを覗いてみたいと思います。
パーティショニングとクラスタリング
パーティショニングとクラスタリングは、BigQueryで大量のデータを効率的に処理するための重要なテクニックです。パーティショニングとクラスタリングを組み合わせて使用することで、クエリのパフォーマンスを最適化し、コストを削減することができます。パーティショニング
パーティショニングは、テーブル内のデータを論理的にセグメント化する方法です。テーブルの特定の列を基準にデータを分割し、効率的なデータクエリを可能にします。
パーティショニングを使用することで、特定の時間範囲のデータや特定のカテゴリのデータに対して高速な検索や集計が可能になります。また、パーティショニングはクエリのパフォーマンスを向上させるだけでなく、クエリのコストを削減する効果もあります。
パーティショニングについては以前@zakisanbaimanさんにより弊社ブログも公開されていますのでそちらもご確認ください。
クラスタリング
クラスタリングは、DBMSのインデックスのイメージに近いです。テーブル内のデータの物理的な配置を最適化する方法です。最大4つまでの特定の列(または複数の列)に基づいてデータをソートし、関連するデータを同じストレージブロックにまとめます。
これにより、クエリの実行時間を短縮し、データのスキャン量を削減することができます。
クラスタリングを使用することで、特定のクエリパターンに最適化されたデータの配置が可能になります。
BigQuery のパーティショニングとクラスタリングの Recommenderについて
※プレビュー機能について紹介しています。内容は変更される可能性がありますので、公式ソースをご参照ください。BigQuery のパーティショニングとクラスタリングの Recommender は、BigQuery テーブルを最適化するためのパーティションまたはクラスタの推奨事項を生成します。Recommender は、BigQuery テーブルのワークフローを分析し、テーブル パーティショニングまたはテーブル クラスタリングのいずれかを使用してワークフローとクエリの費用を最適化するための推奨事項を提供します。https://cloud.google.com/bigquery/docs/view-partition-cluster-recommendations?hl=ja#gcloud過去30日間の実行データからBigQueryテーブルを分析するようです。機械学習を利用し、Recommender適用後の最適化を予測してくれるようです。
主要のリージョンのリソースをサポートしており、レガシーSQLの使用の分析は除外されるようです。
Recommender API を使用して試してみる
以下 gcloud recommender recommendations list コマンドで取得できます。PROJECT_NAME/REGION_NAMEはプロジェクト名前、リージョンに置き換えます。今回はFORMAT_TYPEはjsonとしました。
1 2 3 4 5 |
gcloud recommender recommendations list \ --project=PROJECT_NAME \ --location=REGION_NAME \ --recommender=google.bigquery.table.PartitionClusterRecommender \ --format=FORMAT_TYPE \ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
[ { "additionalImpact": [ { "category": "PERFORMANCE" } ], "associatedInsights": [ { "insight": "aaa" } ], "content": { "operationGroups": [ { "operations": [ { "action": "custom", "path": "/", "resource": "bbb", "resourceType": "bigquery.googleapis.com/Table", "value": "https://cloud.google.com/bigquery/docs/clustered-tables" } ] } ], "overview": { "bytesSavedMonthly": "33463186032", "clusterColumns": [ "ccc" ], "slotMsSavedMonthly": "19418324" } }, "description": "Cluster the table on the recommended column(s) to reduce cost and improve performance.", "etag": "\"ddd\"", "lastRefreshTime": "2023-05-27T15:56:40.937631571Z", "name": "eee", "primaryImpact": { "category": "COST" }, "priority": "P4", "recommenderSubtype": "CLUSTER", "stateInfo": { "state": "ACTIVE" } } ] |
同じ項目のコンソールのプロジェクト→推奨事項は以下
