BigQueryのFORループでデータセットの全テーブルに対してクエリを投げる
複数のテーブルのレコード件数を表にまとめたいことがたまにある。
そういう時はFORループを使用して、count(*)した結果を一時テーブルに入れて確認したりする。
DECLARE dataset STRING DEFAULT "test_dataset";
CREATE OR REPLACE TEMP TABLE record_counts (
table_name STRING
,record_count INT64
);
FOR table IN (SELECT table_name FROM `region-us.INFORMATION_SCHEMA.TABLES` AS name WHERE table_schema = dataset)
DO
EXECUTE IMMEDIATE FORMAT(
"""
INSERT INTO record_counts
SELECT '%s', count(*)
FROM `%s.%s`
"""
,table.table_name
,dataset
,table.table_name
);
END FOR;
SELECT * FROM record_counts;