4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BigQueryスクリプトのFOR INループで複数テーブルを一括処理する

Last updated at Posted at 2025-12-10

概要

特定のデータセット配下に存在する複数テーブルに対して一括でクエリ実行をした際に使用したBigQueryスクリプトを紹介します。
__TABLES_SUMMARY__ テーブルとFOR INループを組み合わせることで、対象テーブルを動的に取得し、ストアドプロシージャの呼び出しやDROP TABLE等、お好きなクエリを楽に実行できます。

BigQueryスクリプト

ストアドプロシージャの一括呼び出し

-- 変数の宣言(BEGINの外)
DECLARE dataset_name STRING DEFAULT 'my_dataset';

-- メイン処理(BEGINの中)
BEGIN
  FOR record IN (
    SELECT table_id
    FROM `my-project.my_dataset.__TABLES_SUMMARY__`
    WHERE REGEXP_CONTAINS(table_id, r'^target_table_\d{8}$') --対象テーブル
    ORDER BY table_id
  )
  DO
    CALL `my-project.my_dataset.my_stored_procedure`(
      dataset_name,
      record.table_id
    );
  END FOR;
END;

テーブルの一括削除

DECLARE dataset_name STRING DEFAULT 'my_dataset';

BEGIN
  FOR record IN (
    SELECT table_id
    FROM `my-project.my_dataset.__TABLES_SUMMARY__`
    WHERE REGEXP_CONTAINS(table_id, r'^target_table_\d{8}$')
    ORDER BY table_id
  )
  DO
    EXECUTE IMMEDIATE FORMAT("""
      DROP TABLE `my-project.%s.%s`
    """, dataset_name, record.table_id);
  END FOR;
END;

FOR INループを使用しているため1テーブルずつクエリ実行されるのでご注意下さい。
(並列実行されないので対象テーブルが100単位になると完了まで途方もない時間がかかります。)

以上です。
どなたかのお役に立てれば幸いです。

関連資料

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?