BigQuery テーブルのメタデータ インデックス作成
このドキュメントでは、BigQuery の列メタデータ インデックスについて説明します。また、専用リソースを割り当ててインデックスの更新頻度とクエリのパフォーマンスを向上させる方法についても説明します。
BigQuery は、1 GiB を超える BigQuery テーブルのメタデータを自動的にインデックスに登録します。このメタデータには、ファイルの場所、パーティショニング情報、列レベルの属性が含まれます。BigQuery は、クエリの最適化と高速化に使用します。
デフォルトでは、BigQuery のメタデータ インデックス作成は無料のバックグラウンド オペレーションであり、ユーザーによ���操作は必要ありません。ただし、インデックスの更新頻度は使用可能な空きリソースに依存し、パフォーマンス サービスレベル目標(SLO)はありません。ユースケースでインデックスの更新頻度が重要である場合は、BACKGROUND
予約を構成することをおすすめします。
メタデータ インデックスの更新時間を表示する
テーブルのメタデータ インデックスの最終更新時間を表示するには、INFORMATION_SCHEMA.TABLE_STORAGE
ビューの LAST_METADATA_INDEX_REFRESH_TIME
列に対してクエリを実行します。手順は次のとおりです。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
SELECT project_id, project_number, table_name, last_metadata_index_refresh_time FROM [
PROJECT_ID
.]region-REGION
.INFORMATION_SCHEMA.TABLE_STORAGE;次のように置き換えます。
PROJECT_ID
: 実際の Google Cloud プロジェクト ID。指定しない場合は、デフォルトのプロジェクトが使用されます。REGION
: プロジェクトが配置されているリージョン(例:region-us
)。
[
実行] をクリックします。
列メタデータ インデックスの使用状況を表示する
ジョブの完了後に列メタデータ インデックスが使用されたかどうかを確認するには、Job リソースの TableMetadataCacheUsage
プロパティを確認します。unusedReason
フィールドが空(入力されていない)場合、列��タデータ インデックスが使用されました。値が設定されている場合、付属の explanation
フィールドに、列メタデータ インデックスが使用されなかった理���が���示��れ��す。
列メタデータ インデックスの使用状況は、INFORMATION_SCHEMA.JOBS
ビューの metadata_cache_statistics
フィールドで確認することもできます。
たとえば、次のコマンドでは、my-job
ジョブの列メタデータ インデックスの使用状況が表示されます。
SELECT metadata_cache_statistics FROM `region-US`.INFORMATION_SCHEMA.JOBS WHERE job_id = 'my-job';
別の例として、次のコマンドでは、my-table
テーブルの列メタデータ インデックスを使用したジョブの数を表示します。
SELECT COUNT(*) FROM `region-US`.INFORMATION_SCHEMA.JOBS, UNNEST(metadata_cache_statistics.table_metadata_cache_usage) AS stats WHERE stats.table_reference.table_id='my-table' AND stats.table_reference.dataset_id='my-dataset' AND stats.table_reference.project_id='my-project' AND stats.unusedReason IS NULL;
専用のインデックス リソースを設定する
プロジェクトでメタデータ インデックスの更新用のリソースを設定するには、まずプロジェクトに予約を割り当てる必要があります。手順は次のとおりです。
予約を設定したら、次のいずれかの方法でメタデータ インデックス作成ジョブにスロットを割り当てます。デフォルトでは、この方法で割り振られたスロットは、アイドル状態の場合、他のジョブと共有されます。詳細については、アイドル スロットをご覧ください。
コンソール
Google Cloud コンソールで、[容量管理] ページに移動します。
> [割り当ての作成] をクリックします。
[予約のアクション]予約プロジェクトを選択します。
[Job Type] を [Background] に設定します。
[作成] をクリックします。
bq
bq mk
コマンドを使用します。
bq mk \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --reservation_assignment \ --reservation_id=RESERVATION_NAME \ --assignee_id=PROJECT_ID \ --job_type=BACKGROUND \ --assignee_type=PROJECT
次のように置き換えます。
SQL
予約をプロジェクトに割り当てるには、CREATE ASSIGNMENT
DDL ステートメントを使用します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
次のように置き換えます。CREATE ASSIGNMENT ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID OPTIONS ( assignee = 'projects/PROJECT_ID', job_type = 'BACKGROUND');
[
実行] をクリックします。
インデックス ジョブ情報を表示する
専用のインデックス登録ジョブを設定したら、JOBS
ビューでインデックス登録ジョブに関する情報を表示��きます。次の SQL ��������は、PROJECT_NAME の最新の更新ジョブ 5 件を示しています。
SELECT * FROM region-us.INFORMATION_SCHEMA.JOBS WHERE project_id = 'PROJECT_NAME' AND SEARCH(job_id, '`metadata_cache_refresh`') ORDER BY creation_time DESC LIMIT 5;
PROJECT_NAME
は、メタデータ インデックス ジョブを含むプロジェクトの名前に置き換えます。
メタデータ インデックス アラートを構成する
Cloud Monitoring のアラート プロセスは、BigQuery のパフォーマンスが定義された基準を満たしていない場合に通知します。詳細については、アラートの概要をご覧ください。メタデータ インデックスを使用すると、スロットの使用状況と古いデータに関するアラートを構成できます。
スロットの使用状況に関するアラート
このアラートは、バックグラウンド予約が割り当ての定義された割合を超えたときに通知します。デフォルト値は 95% です。このアラートは、特定の予約またはすべてのバックグラウンド予約に対して構成できます。このアラートがトリガーされた場合は、予約サイズを増やすことをおすすめします。
バックグラウンド 予約ごとにこのアラートを構成するには、次の操作を行います。
- モニタリング通知チャンネルをまだ設定していない場合は、設定します。
[Integrations] ページに移動します。
BigQuery インテグレーションを見つけ、[詳細を表示] をクリックします。
[アラート] タブで、[スロット使用量 - バックグラウンド メタデータ キャッシュのスロット使用量が高すぎる] を選択します。
省略可: このアラートをさらにカスタマイズするには、[オプションを表示] > [アラート ポリシーをカスタマイズ] をクリックします。
[通知の構成] で通知チャンネルを選択します。
[作成] をクリックします。
未更新アラート
このアラートは、列メタデータ インデックスの平均の古さが既存の平均と比較して過度に増加し��場合に通知します。デフォルトのしきい値は、4 時間の平均が 30 分以上続く間、前の平均の 2 倍を超えている場合です。このアラートがトリガーされた場合は、予約サイズを増やすか、バックグラウンド予約を作成することをおすすめします(まだ作成していない場合)。
このアラートを構成する手順は次のとおりです。
- モニタリング通知チャンネルをまだ設定していない場合は、設定します。
[Integrations] ページに移動します。
BigQuery インテグレーションを見つけ、[詳細を表示] をクリックします。
[アラート] タブで、[列メタデータ インデックスの未更新期間 - 増加率が過大] を選択します。
省略可: このアラートをさらにカスタマイズするには、[オプションを表示] > [アラート ポリシーをカスタマイズ] をクリックします。
[通知の構成] で通知チャンネルを選択します。
[作成] をクリックします。
制限事項
メタデータ クエリのパフォーマンスの向上は、SELECT
、INSERT
、CREATE TABLE AS SELECT
ステートメントにのみ適用されます。データ操作言語(DML)ステートメントでは、メタデータ インデックス化によるパフォーマンスの向上は見られません。
次のステップ
JOBS
ビューを使用して、プロジェクト内のすべてのジョブを表示する方法を確認する。- スロットの容量と使用率を表示する方法を確認する。