{GCP BigQuery}検索インデックスの管理

https://cloud.google.com/bigquery/docs/search-index?hl=ja
https://zenn.dev/cloud_ace/articles/d6be4751afaa81

 

検索インデックスは、大きなテーブルを想定して設計されています。10 GB 未満のテーブルに検索インデックスを作成した場合、インデックスは入力されません。

SEARCH 関数を呼び出す予定のない列はインデックス登録しないでください。

 

-- 1. 前作業

gcloud init
gcloud auth list

gcloud --version

gcloud projects create project01-9999999 \
--name="project01"

gcloud config list
gcloud config set project project01-9999999
gcloud config set compute/region asia-northeast1 --quiet
gcloud config set compute/zone asia-northeast1-a --quiet

gcloud beta billing accounts list
gcloud beta billing projects link project01-9999999 --billing-account=111111-111111-111111

gcloud services enable compute.googleapis.com --project project01-9999999

gcloud components update


-- 2. BigQuery API有効化

gcloud services list --enabled


gcloud services enable bigquery.googleapis.com \
--project project01-9999999


-- 3. BigQueryデータセットを作成する

bq mk ds01

bq ls

-- 4. 動作確認

検索インデックスを作成する

CREATE OR REPLACE TABLE ds01.tab1(col1 STRING, col2 INT64, col3 JSON);

CREATE SEARCH INDEX ind1
ON ds01.tab1(col1, col3);


insert into ds01.tab1(col1) values('A');


DECLARE i INT64 DEFAULT 1;

set i = 0;

LOOP
  insert into ds01.tab1 select * from ds01.tab1;
  
  SET i = i + 1;
  IF i >= 10 THEN
    LEAVE;
  END IF;
END LOOP;

select count(*) from ds01.tab1;

 

検索インデックスに関する情報を取得する


SELECT table_name, index_name, ddl, coverage_percentage, analyzer, index_status
FROM `project01-9999999`.ds01.INFORMATION_SCHEMA.SEARCH_INDEXES
;

SELECT table_name, index_name, index_column_name, index_field_path
FROM `project01-9999999`.ds01.INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS
;


SELECT
    ic.INDEX_CATALOG AS project_name
  , ic.INDEX_SCHEMA AS dataset_name
  , ic.TABLE_NAME AS table_name
  , ic.INDEX_NAME AS index_name
  , ic.INDEX_COLUMN_NAME AS column_name
  , ic.INDEX_FIELD_PATH AS field_path
  , i.INDEX_STATUS AS status
  , c.DATA_TYPE AS data_type
FROM
  ds01.INFORMATION_SCHEMA.SEARCH_INDEXES i
INNER JOIN
  ds01.INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS ic
ON
  i.TABLE_NAME = ic.TABLE_NAME
  AND i.INDEX_NAME = ic.INDEX_NAME
LEFT OUTER JOIN
  ds01.INFORMATION_SCHEMA.COLUMNS c
ON
  i.INDEX_CATALOG = c.TABLE_CATALOG
  AND i.INDEX_SCHEMA = c.TABLE_SCHEMA
  AND ic.TABLE_NAME = c.TABLE_NAME
  AND ic.INDEX_COLUMN_NAME = c.COLUMN_NAME
ORDER BY
    project_name
  , dataset_name
  , table_name
  , column_name
;

 

検索インデックスを削除する

DROP SEARCH INDEX ind1 ON ds01.tab1;

 

-- 5. クリーンアップ

gcloud projects list

gcloud projects delete project01-9999999 \
--quiet