【发布时间】:2021-10-28 21:08:29
【问题描述】:
我在 BigQuery 中使用以下标准 SQL 查询来列出使用表元数据超过 90 天的表。
DECLARE projects ARRAY<STRING>;
DECLARE dt_list ARRAY<STRING>;
DECLARE i INT64 DEFAULT 0;
DECLARE query_string STRING;
SET projects = ['my-project-1', 'my-project-2,...,'my-project-n'];
# List dataset of current project
SET schema_list = (
SELECT
ARRAY_AGG(schema_name)
FROM
INFORMATION_SCHEMA.SCHEMATA #1
#List Datasets of a Project
WHILE
i < ARRAY_LENGTH(projects) DO
SET dt_list = ( "SELECT ARRAY_AGG(schema_name) FROM UNNSET(projects) as proj,"|| proj[OFFSET(iter)] ||".INFORMATION_SCHEMA.SCHEMATA" #2
);
/*SET dt_list = ( " SELECT ARRAY_AGG(schema_name) FROM "
|| projects[OFFSET(iter)] ||".INFORMATION_SCHEMA.SCHEMATA" #3
);*/
SET i = i+1;
END WHILE;
#List tables of a Dataset
WHILE
i < ARRAY_LENGTH(dt_list) DO
SET query_string = " SELECT dataset_id, table_id, ROUND(size_bytes/POW(10,9),2) AS size_gb, TIMESTAMP_MILLIS(creation_time) AS creation_time, TIMESTAMP_MILLIS(last_modified_time) AS last_modified_time, row_count, type FROM "
|| dt_list[OFFSET(i)] || ".__TABLES__";
EXECUTE IMMEDIATE query_string;
SET i = i + 1;
END WHILE;
我可以使用“#1”查询获取当前 GCP 项目的表列表以及上次修改日期。 当我尝试使用项目(项目)数组获得相同的结果时,我收到诸如“查询错误:无法识别的名称:proj”(对于#2)和“查询错误:无法强制表达式”之类的错误 SELECT ARRAY_AGG(schema_name ) FROM "|| projects[OFFSET(iter)] ||".INFORMATION_SCHEMA.SCHEMATA" 输入 ARRAY"(用于#3)。
我的目的是使用一系列项目(因为目前我们有多个项目并计划在单个项目中运行此查询而不是在每个项目中单独运行)使用标准列出超过 90 天(长期存储)的 BigQuery 表SQL。
请帮忙。
【问题讨论】:
-
你为什么要这么做?你有分区表吗?
-
嗨@guillaumeblaquiere,是的,所有表都已分区。我试图确定这些表在 90 天内没有被修改,因此如果需要,可以删除这些表,这可能有助于减少存储消耗。
标签: google-cloud-platform google-bigquery