BigQuery テーブルのメタデータ インデックス処理
このドキュメントでは、BigQuery の列メタデータ インデックス処理について説明し、インデックスの鮮度とクエリのパフォーマンスを向上させるために専用リソースを割り当てる方法について説明します。
BigQuery は、1 GiB を超える BigQuery テーブルのメタデータを自動的にインデックス処理します。このメタデータには、ファイルの場所、パーティショニング情報、列レベルの属性が含まれます。BigQuery は、このメタデータを使用してクエリを最適化し、高速化します。
デフォルトでは、BigQuery のメタデータ インデックス処理は無料のバックグラウンド オペレーションであり、ユーザーによる操作は必要ありません。ただし、インデックスの鮮度は利用可能な無料のリソースに依存し、パフォーマンスのサービスレベル目標(SLO)はありません。インデックスの鮮度がユースケースで重要な場合は、BACKGROUND
予約を構成することをおすすめします。
メタデータ インデックスの更新時間を表示する
テーブルのメタデータ インデックスの最終更新時間を表示するには、INFORMATION_SCHEMA.TABLE_STORAGE
ビューの LAST_METADATA_INDEX_REFRESH_TIME
列に対してクエリを実行します。手順は次のとおりです。
Trusted 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
: 実際の Trusted Cloud by S3NS プロジェクト 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;
専用のインデックス処理リソースを設定する
プロジェクトでメタデータ インデックスの更新用にリソースを設定するには、まずプロジェクトに予約が割り当てられている必要があります。手順は次のとおりです。
予約を設定したら、次のいずれかの方法でメタデータ インデックスの処理を行うジョブにスロットを割り当てます。デフォルトでは、この方法で割り当てたスロットは、アイドル状態の場合に他のジョブと共有されます。詳細については、アイドル スロットをご覧ください。
コンソール
Trusted Cloud コンソールで、[容量管理] ページに移動します。
> [割り当ての作成] をクリックします。
[予約のアクション]予約プロジェクトを選択します。
[ジョブタイプ] を [バックグラウンド] に設定します。
[作成] をクリックします。
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 ステートメントを使用します。
Trusted 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% です。このアラートは、特定のリソース予約に対して、またはすべてのバックグラウンド リソース予約に対して構成できます。このアラートがトリガーされた場合は、予約サイズを増やすことをおすすめします。
バックグラウンド予約ごとにこのアラートを構成するには、次の操作を行います。
- モニタリング通知チャンネルをまだ設定していない場合は、設定します。
[インテグレーション] ページに移動します。
BigQuery インテグレーションを見つけて、[詳細を表示] をクリックします。
[アラート] タブで、[スロット使用率 - バックグラウンド メタデータ キャッシュ スロット使用率が高すぎる] を選択します。
省略可: このアラートをさらにカスタマイズするには、[オプションを表示 > アラート ポリシーをカスタマイズ] をクリックします。
[通知の構成] で通知チャネルを選択します。
[作成] をクリックします。
鮮度低下アラート
このアラートは、列メタデータ インデックスの平均鮮度が既存の平均と比較して大幅に低下した場合に通知します。デフォルトのしきい値は、4 時間の平均が 30 分以上、以前の平均の 2 倍を超えた場合です。このアラートがトリガーされた場合は、予約サイズを増やすか、バックグラウンド予約がない場合は作成することをおすすめします。
このアラートを構成するには、次の操作を行います。
- モニタリング通知チャンネルをまだ設定していない場合は、設定します。
[インテグレーション] ページに移動します。
BigQuery インテグレーションを見つけて、[詳細を表示] をクリックします。
[アラート] タブで、[列メタデータ インデックスが古い - 割合増加が高すぎる] を選択します。
省略可: このアラートをさらにカスタマイズするには、[オプションを表示 > アラート ポリシーをカスタマイズ] をクリックします。
[通知の構成] で通知チャネルを選択します。
[作成] をクリックします。
制限事項
メタデータ クエリのパフォーマンスの強化は、SELECT
、INSERT
、CREATE TABLE AS SELECT
ステートメントにのみ適用されます。データ操作言語(DML)ステートメントでは、メタデータ インデックス処理による改善は見られません。
次のステップ
JOBS
ビューを使用して、プロジェクト内のすべてのジョブを表示する方法について確認する。- スロットの容量と使用率を表示する方法を確認する。