首页 > 解决方案 > 有没有办法从控制台批量删除表?

问题描述

在 BigQuery 中,我有来自 Firebase 的每日分析表。这些是随着时间的推移而建立起来的,现在大约有 600 个。控制台中有什么方法可以删除所有超过一年的表吗?

如果没有,我还有其他方法可以做到这一点吗?我现在启用了默认表到期,但我知道这个值只适用于未来。

标签: google-cloud-platformgoogle-bigquery

解决方案


如果将脚本INFORMATION_SCHEMA结合使用,则可以编写如下 SQL:

DECLARE pairs ARRAY<STRUCT<tableName STRING, creation_time TIMESTAMP>>;
DECLARE index DEFAULT 0;
SET pairs = (
  SELECT ARRAY_AGG(
    STRUCT<tableName STRING, creation_time TIMESTAMP>(
     CONCAT('`', TABLE_CATALOG, '.', TABLE_SCHEMA, '.', TABLE_NAME, '`'),
     CREATION_TIME
    )
  )
  FROM yourDataset.INFORMATION_SCHEMA.TABLES
  WHERE TABLE_TYPE = 'BASE TABLE');

SELECT pairs; -- print here to make sure you're operating on right set of tables

WHILE index < ARRAY_LENGTH(pairs) DO BEGIN
  DECLARE tableAndCreationTime DEFAULT pairs[OFFSET(index)];
  DECLARE sql DEFAULT FORMAT("ALTER TABLE %s SET OPTIONS (expiration_timestamp=TIMESTAMP '%t')", 
                tableAndCreationTime.tableName, 
                TIMESTAMP_ADD(tableAndCreationTime.creation_time, INTERVAL 365 DAY));
  SELECT sql; -- print again to regret, when ready uncomment next line
  -- EXECUTE IMMEDIATE sql;
  SET index = index + 1;
END;
END WHILE;

推荐阅读