Atsushi2022の日記

データエンジニアリングに関連する記事を投稿してます

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;

参考

https://www.yasuhisay.info/entry/2022/03/14/093500