♻️
BigQueryのコンソールだけでテーブル名を一括変更する
Suffixの命名にブレがありシャーディングがうまくいっていないテーブルがあった。
具体的には
-
table_yyyymmdd
(table_2023010115
) -
table_yyyymmddhh
(table_20230102
)
が混在していた。
この状況を改善するため、テーブル名を一括で修正するスクリプトを用意した。ただ、Pythonのスクリプトなどを書くのも面倒だったので、BQのコンソールだけで完結するようにクエリを書いた。
クエリ
- テーブル名の変更には、
ALTER TABLE - RENAME TO -
を使う。 - 実行時間は500テーブルで20分ほどだった。
DECLARE table_list ARRAY<STRING>;
DECLARE i INT64 DEFAULT 0;
-- 対象のテーブル名を配列として取得
SET table_list = ARRAY(
SELECT table_name
FROM `PROJECT_ID.DATASET_NAME.INFORMATION_SCHEMA.TABLES`
WHERE table_name LIKE 'table_%15'
);
-- WHILE ループを使用してテーブル名を変更
WHILE i < ARRAY_LENGTH(table_list) DO
BEGIN
-- try to execute the rename
EXECUTE IMMEDIATE FORMAT(
"ALTER TABLE `PROJECT_ID.DATASET_NAM.%s` RENAME TO `%s`",
table_list[OFFSET(i)],
SUBSTR(table_list[OFFSET(i)], 1, LENGTH(table_list[OFFSET(i)]) - 2)
);
EXCEPTION WHEN ERROR THEN
-- 例外処理。ログテーブルに書き込むなりなんなり。
capabilities of BigQuery
END;
SET i = i + 1;
END WHILE;
Discussion