SEARCH_INDEXES_BY_ORGANIZATION ビュー

BigQuery 検索インデックスでは、組織が特定のリージョンの上限に達するまで、インデックス管理を無料で行えます。INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION ビューを使用すると、プロジェクトとテーブルごとに上限に対する現在の使用状況を確認できます。INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION ビューには、現在のプロジェクトに関連付けられた組織全体の検索インデックスごとに 1 行が表示されます。

必要な権限

INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION ビューをクエリするには、組織に対する次の Identity and Access Management(IAM)権限が必要です。

  • bigquery.tables.get
  • bigquery.tables.list

次の各 IAM 事前定義ロールには、上の権限が含まれています。

  • roles/bigquery.admin
  • roles/bigquery.dataViewer
  • roles/bigquery.dataEditor
  • roles/bigquery.metadataViewer

このスキーマビューは、Google Cloud 組織が定義されているユーザーのみが使用できます。

BigQuery の権限の詳細については、IAM でのアクセス制御をご覧ください。

スキーマ

INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION ビューのスキーマは次のとおりです。

列名 データ型
project_id STRING データセットを含むプロジェクトの名前。
project_number STRING 該当するデータセットが含まれているプロジェクトの番号。
index_catalog STRING データセットを含むプロジェクトの名前。
index_schema STRING インデックスを含むデータセットの名前。
table_name STRING インデックスが作成されるベーステーブルの名前。
index_name STRING 検索インデックスの名前。
index_status STRING インデックスのステータスは次のいずれかになります。
  • ACTIVE: インデックスは使用可能または作成中です。
  • PENDING DISABLEMENT は、インデックス付きベーステーブルの合計サイズが組織の上限を超えていることを意味します。インデックスは削除のキューに追加されます。この状態では、インデックスは検索クエリで使用でき、検索インデックスのストレージに対して課金されます。
  • TEMPORARILY DISABLED: インデックス付きベーステーブルの合計サイズが組織の上限を超えているか、インデックス付きベーステーブルが 10 GB 未満です。この状態の場合、インデックスは検索クエリで使用されず、検索インデックスのストレージに対して課金されません。
  • PERMANENTLY DISABLED: インデックス付きの列の型を STRING から INT64 に変更するなど、ベーステーブルに対して互換性のないスキーマ変更があります。
index_status_details RECORD レコードには次のフィールドが含まれます。
  • throttle_status: 検索インデックスのスロットル状態を示します。有効な値は次のとおりです。
    • UNTHROTTLED: インデックスは使用可能です。
    • BASE_TABLE_TOO_SMALL: ベーステーブルのサイズが 10 GB 未満です。この上限は、インデックス管理ジョブに独自の予約を使用するかどうかに関係なく適用されます。この場合、インデックスは一時的に無効になり、検索クエリはインデックスを使用しません。
    • BASE_TABLE_TOO_LARGE: ベーステーブルのサイズが組織の上限を超えています。
    • ORGANIZATION_LIMIT_EXCEEDED: 組織内のインデックス付きベーステーブルの合計サイズが組織の上限を超えています。
  • message: インデックスのステータスを説明する詳細なメッセージです。
use_background_reservation BOOL インデックス メンテナンスで BACKGROUND 予約を使用するかどうかを示します。インデックス メンテナンスで上限が使用される場合は、FALSE に設定されます。

スコープと構文

このビューに対するクエリでは、リージョン修飾子を指定する必要があります。次の表で、このビューのリージョン スコープを説明します。

ビュー名 リソース スコープ リージョン スコープ
[`PROJECT_ID`.]`region-REGION`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION 指定されたプロジェクトを含む組織 REGION

次のように置き換えます。

  • 省略可: PROJECT_ID:Google Cloud プロジェクトの ID。指定しない場合は、デフォルトのプロジェクトが使用されます。

  • REGION: プロジェクトのリージョン。例: `myproject`.`region-us`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION

インデックスのスロットリング

インデックスがスロットリングされている場合、そのテーブルサイズは組織の上限にはカウントされません。このスロットリングは、ベーステーブルのサイズが 10 GB 未満になるか、組織の上限を超えた場合に発生します。インデックスがスロットリングされると、その管理ジョブが一時停止され、インデックスが古くなり、最終的に一時的に無効になります。そのため、検索クエリではインデックスを使用できません。

このセクションでは、INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION ビューのクエリ例を示します。

特定のリージョンで使用量が上限を超えているかどうかを確認する

次の例は、米国のマルチリージョン内の共有スロットを使用する組織全体のインデックス付きベーステーブルの合計サイズが 100 TB を超えるかどうかを示しています。

WITH
 indexed_base_table_size AS (
 SELECT
   SUM(base_table.total_logical_bytes) AS total_logical_bytes
 FROM
   `region-us`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION AS search_index
 JOIN
   `region-us`.INFORMATION_SCHEMA.TABLE_STORAGE_BY_ORGANIZATION AS base_table
 ON
   (search_index.table_name = base_table.table_name
     AND search_index.project_id = base_table.project_id
     AND search_index.index_schema = base_table.table_schema)
 WHERE
   TRUE
   -- Excludes search indexes that are permanently disabled.
   AND search_index.index_status != 'PERMANENTLY DISABLED'
   -- Excludes BASE_TABLE_TOO_SMALL search indexes whose base table size is
   -- less than 10 GB. These tables don't count toward the limit.
   AND search_index.index_status_details.throttle_status != 'BASE_TABLE_TOO_SMALL'
   -- Excludes search indexes whose project has BACKGROUND reservation purchased
   -- for search indexes.
   AND search_index.use_background_reservation = false
 -- Outputs the total indexed base table size if it exceeds 100 TB,
 -- otherwise, doesn't return any output.
)
SELECT * FROM indexed_base_table_size
WHERE total_logical_bytes >= 109951162777600 -- 100 TB

次のような結果になります。

+---------------------+
| total_logical_bytes |
+---------------------+
|     109951162777601 |
+---------------------+

リージョン内のプロジェクト別のインデックス付きベーステーブルの合計サイズを確認する

次の例では、米国マルチリージョンの各プロジェクトのインデックス付きベーステーブルの合計サイズの内訳を示します。

SELECT
 search_index.project_id,
 search_index.use_background_reservation,
 SUM(base_table.total_logical_bytes) AS total_logical_bytes
FROM
 `region-us`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION AS search_index
JOIN
 `region-us`.INFORMATION_SCHEMA.TABLE_STORAGE_BY_ORGANIZATION AS base_table
ON
 (search_index.table_name = base_table.table_name
   AND search_index.project_id = base_table.project_id
   AND search_index.index_schema = base_table.table_schema)
WHERE
 TRUE
  -- Excludes search indexes that are permanently disabled.
  AND search_index.index_status != 'PERMANENTLY DISABLED'
  -- Excludes BASE_TABLE_TOO_SMALL search indexes whose base table size is
  -- less than 10 GB. These tables don't count toward limit.
 AND search_index.index_status_details.throttle_status != 'BASE_TABLE_TOO_SMALL'
GROUP BY search_index.project_id, search_index.use_background_reservation

次のような結果になります。

+---------------------+----------------------------+---------------------+
|     project_id      | use_background_reservation | total_logical_bytes |
+---------------------+----------------------------+---------------------+
| projecta            |     true                   |     971329178274633 |
+---------------------+----------------------------+---------------------+
| projectb            |     false                  |     834638211024843 |
+---------------------+----------------------------+---------------------+
| projectc            |     false                  |     562910385625126 |
+---------------------+----------------------------+---------------------+

スロットリングされた検索インデックスを確認する

次の例では、組織とリージョン内でスロットリングされているすべての検索インデックスを返します。

SELECT project_id, index_schema, table_name, index_name
FROM
 `region-us`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION
WHERE
 -- Excludes search indexes that are permanently disabled.
 index_status != 'PERMANENTLY DISABLED'
 AND index_status_details.throttle_status IN ('ORGANIZATION_LIMIT_EXCEEDED', 'BASE_TABLE_TOO_LARGE')

次のような結果になります。

+--------------------+--------------------+---------------+----------------+
|     project_id     |    index_schema    |  table_name   |   index_name   |
+--------------------+--------------------+---------------+----------------+
|     projecta       |     dataset_us     |   table1      |    index1      |
|     projectb       |     dataset_us     |   table1      |    index1      |
+--------------------+--------------------+---------------+----------------+