BigQuery での検索の概要
BigQuery 検索インデックスを使用することで、非構造化テキストや半構造化 JSON データに埋め込まれている一意のデータ要素を GoogleSQL を使って効率的に見つけることができます。テーブル スキーマを事前に把握しておく必要はありません。
検索インデックスによって、BigQuery では、強力なカラムストアとテキスト検索が 1 つのプラットフォームで提供され、データの行を個別に検出する必要がある場合に効率的に検索を行うことができます。一般的なユースケースとしてログの分析があります。たとえば、一般データ保護規則(GDPR)の報告用にユーザーに関連するデータ行を識別する、テキスト ペイロード内の特定のエラーコードを検索する、といったことができます。
BigQuery はインデックスを保存して管理するため、データが BigQuery で使用可能になると、SEARCH
関数またはその他の演算子と関数(equal(=
)、IN
、LIKE
演算子や特定の文字列関数と JSON 関数など)を使用してすぐに取得できます。検索を最適化するには、ベスト プラクティスをご覧ください。
ユースケース
BigQuery 検索インデックスは、次のタスクを行う際に役立ちます。
- BigQuery テーブルに保存されているシステムログ、ネットワーク ログ、またはアプリケーション ログを検索する。
- 規制を遵守するために削除するデータ要素を特定する。
- デベロッパーのトラブルシューティングをサポートする。
- セキュリティ監査を実施する。
- 高度な検索フィルタを必要とするダッシュボードを作成する。
- 前処理されたデータを完全一致で検索する。
詳細については、検索インデックスを作成するとインデックスを使用した検索をご覧ください。
料金
組織内のインデックス付きテーブルの合計サイズがリージョンの上限を下回っている場合、検索インデックスの作成と更新に必要な処理に対する料金は発生しません。この上限を超えるインデックス登録をサポートするには、インデックス管理ジョブ用に独自の予約を指定する必要があります。検索インデックスがアクティブな場合、ストレージの費用が発生します。インデックスのストレージ サイズは INFORMATION_SCHEMA.SEARCH_INDEXES
ビューで確認できます。
ロールと権限
検索インデックスを作成するには、インデックスを作成するテーブルに対する bigquery.tables.createIndex
IAM 権限が必要です。検索インデックスを削除するには、bigquery.tables.deleteIndex
権限が必要です。次の IAM 事前定義ロールには、検索インデックスの操作に必要な権限が含まれています。
- BigQuery データオーナー(
roles/bigquery.dataOwner
) - BigQuery データ編集者(
roles/bigquery.dataEditor
) - BigQuery 管理者(
roles/bigquery.admin
)
制限事項
- 検索インデックスをビューまたはマテリアライズド ビューに直接作成することはできませんが、インデックス付きテーブルのビューに対して
SEARCH
関数を呼び出すと、基盤となる検索インデックスを使用できます。 - 検索インデックスの作成後にテーブルの名前を変更すると、そのインデックスは無効になります。
SEARCH
関数は、ポイント検索用に設計されています。ファジー検索、タイプミスの修正、ワイルドカードなどのドキュメント検索は使用できません。- 検索インデックスのカバレッジが 100% でない場合にも、
INFORMATION_SCHEMA.SEARCH_INDEXES
ビューで報告されるすべてのインデックス ストレージに対して費用が発生します。 SEARCH
関数を含むクエリは、BigQuery BI Engine によって高速化されません。DML ステートメントでインデックス付きテーブルが変更される場合、検索インデックスは使用されません。ただし、検索インデックスで最適化可能な述語が DML ステートメントのサブクエリに含まれている場合は使用できます。
- 次のクエリでは検索インデックスは使用されません。
DELETE FROM my_dataset.indexed_table WHERE SEARCH(user_id, '123');
- 次のクエリでは検索インデックスを使用できます。
DELETE FROM my_dataset.other_table WHERE user_id IN ( SELECT user_id FROM my_dataset.indexed_table WHERE SEARCH(user_id, '123') );
クエリでマテリアライズド ビューを参照している場合、検索インデックスは使用されません。
検索インデックスは、マルチステートメント トランザクション クエリでは使用されません。
次のステップ
- 検索インデックスの作成の詳細を確認する。
- 検索インデックスを使用したテーブル検索の詳細を確認する。