【BigQuery】データセットのテーブルを一括削除するSQL

BigQueryのデータセットの中に作成した不要なテーブルをBigQueryのコンソール上のSQLから実行して一括削除するクエリとなる。削除対象外とするテーブルも指定することも可能。処理にはテーブル削除が行われるため重要なテーブルを指定しないように注意。以下、削除検証用のデモテーブル作成クエリも記載する。

参考:テーブルを削除する – Google Cloud BigQuery

BigQueryのテーブルを一括削除するクエリ

DECLARE exclude_tables ARRAY<STRING>;
DECLARE table_names ARRAY<STRING>;
DECLARE i INT64 DEFAULT 0;
DECLARE drop_statement STRING;

-- 除外したいテーブル名を配列に格納
SET exclude_tables = [
  'test_table_1', 
  'test_table_2',
  'test_table_3'
];

-- テーブル名を配列に格納(除外テーブルが空ならすべてのテーブルが対象)
SET table_names = (
  SELECT ARRAY_AGG(table_name)
  FROM `<project>.<dataset>.INFORMATION_SCHEMA.TABLES`
  WHERE table_type = 'BASE TABLE'
    AND (ARRAY_LENGTH(exclude_tables) = 0 OR table_name NOT IN UNNEST(exclude_tables))
);

-- テーブルの削除をループで実行
SET i = 0;
WHILE i < ARRAY_LENGTH(table_names) DO
  SET drop_statement = FORMAT("DROP TABLE `<project>.<dataset>.%s`", table_names[i]);
  EXECUTE IMMEDIATE drop_statement;
  SET i = i + 1;
END WHILE;

クエリ解説

1.変数宣言

DECLARE exclude_tables ARRAY<STRING>;
DECLARE table_names ARRAY<STRING>;
DECLARE i INT64 DEFAULT 0;
DECLARE drop_statement STRING;
  • exclude_tables: 除外するテーブル名を格納する配列型の変数です。
  • table_names: 削除対象のテーブル名を格納する配列型の変数です。
  • i: ループのカウンタ変数で、削除対象のテーブルを順番に処理するために使います。
  • drop_statement: 動的にDROP TABLE文を作成して格納するための文字列型変数です。

2.除外するテーブル名の設定

SET exclude_tables = [
  'test_table_1', 
  'test_table_2',
  'test_table_3'
];
  • **exclude_tables**変数に、削除対象から除外したいテーブル名を配列として設定しています。
  • ここでは、test_table_1、test_table_2、test_table_3を削除対象から除外するよう指定しています。

3.削除対象のテーブル名を取得して配列に格納

SET table_names = (
  SELECT ARRAY_AGG(table_name)
  FROM `listing-strategy.test_delete_table.INFORMATION_SCHEMA.TABLES`
  WHERE table_type = 'BASE TABLE'
    AND (ARRAY_LENGTH(exclude_tables) = 0 OR table_name NOT IN UNNEST(exclude_tables))
);
  • ARRAY_AGG(table_name): INFORMATION_SCHEMA.TABLESから取得したtable_nameを配列としてtable_namesに格納します。
  • table_type = ‘BASE TABLE’: データセット内の通常テーブル(ビューやその他のオブジェクトは除外)だけを対象としています。
  • AND (ARRAY_LENGTH(exclude_tables) = 0 OR table_name NOT IN UNNEST(exclude_tables)):
    ・ARRAY_LENGTH(exclude_tables) = 0: exclude_tablesが空の場合、すべてのテーブルが対象になります。
    ・table_name NOT IN UNNEST(exclude_tables): exclude_tablesに含まれないテーブルだけが削除対象として選ばれます。この処理により、table_namesには、削除対象のテーブル名が配列として格納されます。

4.削除対象のテーブルを順に削除するループ処理

SET i = 0;
WHILE i < ARRAY_LENGTH(table_names) DO
  SET drop_statement = FORMAT("DROP TABLE `listing-strategy.test_delete_table.%s`", table_names[i]);
  EXECUTE IMMEDIATE drop_statement;
  SET i = i + 1;
END WHILE;
  • SET i = 0;: ループのカウンタを初期化します。
  • WHILE i < ARRAY_LENGTH(table_names): table_names配列内のすべてのテーブルが処理されるまでループを実行します。
  • drop_statement = FORMAT(…):
    ・FORMAT関数を使い、DROP TABLE文をdrop_statement変数に格納します。
    ・table_names[i]でi番目のテーブル名を取得し、DROP TABLE文に挿入します。
  • EXECUTE IMMEDIATE drop_statement: DROP TABLE文を実行し、テーブルを削除します
  • SET i = i + 1;: インデックスiを1増やして、次のテーブルを処理します。

検証用の空テーブル作成クエリ

CREATE OR REPLACE TABLE `<project>.<dataset>.test_table_1` (
  id INT64,
  name STRING,
  created_at TIMESTAMP
);

-- Test Table 2
CREATE OR REPLACE TABLE `<project>.<dataset>.test_table_2` (
  user_id INT64,
  action STRING,
  action_date DATE
);

-- Test Table 3
CREATE OR REPLACE TABLE `<project>.<dataset>.test_table_3` (
  product_id INT64,
  product_name STRING,
  price FLOAT64,
  last_updated TIMESTAMP
);

関連記事

BigQueryのWITH句(CTE)とサブクエリの使い分け

クエリのスケジューリングで最新データをLooker Studioで可視化

SQL不要でSearch Consoleを深掘り!BigQuery「会話型分析」で実現する次世代SEOデータ分析 Conversational Analytics

おすすめ記事

最近の記事
おすすめ記事
  1. GA4の「セッション」とは?図解で分かりやすく解説

  2. SQL不要でSearch Consoleを深掘り!BigQuery「会話型分析」で実現する次世代SEOデータ分析 Conversational Analytics

  3. Search ConsoleのデータをBigQueryにエクスポートする全手順

  1. BigQueryからスプレッドシートのデータを連携

  2. BigQuery workflowsでGA4スキーマ履歴を管理

  3. BigQueryでJavaScript UDFを活用

PAGE TOP