【问题标题】:List GCP BigQuery tables older than 90days列出超过 90 天的 GCP BigQuery 表
【发布时间】: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


【解决方案1】:

在 BigQuery 中,数据会在 90 天后进入长期存储而不进行更新,而且成本要低两倍。此规则在分区级别强制执行。

这就是为什么,我建议你看看the partition information schema

SELECT  * FROM `projectID.dataset.INFORMATION_SCHEMA.PARTITIONS`

您有一列告诉您分区中是否处于长期存储中,因此,您可以立即知道是否可以删除分区(而不是整个表)。因此,您可以像这样改进您的存储优化。

如果您不想遵守长期存储规则并且不希望有 90 天没有更新的清除,您仍然有最后修改日期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多