google-cloud-platform - 有没有办法从控制台批量删除表?
问题描述
在 BigQuery 中,我有来自 Firebase 的每日分析表。这些是随着时间的推移而建立起来的,现在大约有 600 个。控制台中有什么方法可以删除所有超过一年的表吗?
如果没有,我还有其他方法可以做到这一点吗?我现在启用了默认表到期,但我知道这个值只适用于未来。
解决方案
如果将脚本与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;