Snowflake cloud data platform 数据库中所有表的聚合

Snowflake cloud data platform 数据库中所有表的聚合,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我的数据库中的所有表都包含同一列,称之为日期\标记\无效。我想为所有表找到此列的最大值。有没有一种方法可以在不运行的情况下获得这些 从一个特定表格中选择标记为无效的MAXdate 每一张桌子都要分开吗 对于Postgres来说,可以做到这一点,但就我所见,这在Snowflake上不起作用。所有列的最小值/最大值都存储在每个表的元数据中,但不幸的是,在例如INFORMATION\u SCHEMA.columns中无法访问 如果您创建了一个存储过程来迭代INFORMATION_SCHEMA.COLU

我的数据库中的所有表都包含同一列,称之为日期\标记\无效。我想为所有表找到此列的最大值。有没有一种方法可以在不运行的情况下获得这些

从一个特定表格中选择标记为无效的MAXdate 每一张桌子都要分开吗


对于Postgres来说,可以做到这一点,但就我所见,这在Snowflake上不起作用。

所有列的最小值/最大值都存储在每个表的元数据中,但不幸的是,在例如INFORMATION\u SCHEMA.columns中无法访问

如果您创建了一个存储过程来迭代INFORMATION_SCHEMA.COLUMNS中的表,它仍然是一个仅元数据的操作,但必须手动完成

Snowflake没有任何可以运行动态SQL的函数,比如Postgres的query-to-xml

动态生成聚合语句的查询将位于

SELECT
  'SELECT MAX(MX) FROM ('
   || LISTAGG(CHR(10)||'  SELECT MAX('||COLUMN_NAME||') MX FROM '
   || TABLE_CATALOG||'.'||TABLE_SCHEMA||'.'||TABLE_NAME, ' UNION')
  WITHIN GROUP (ORDER BY NULL)||CHR(10)||')' COL
FROM INFORMATION_SCHEMA.COLUMNS
GROUP BY COLUMN_NAME;

在过去,作为一名开发人员,我使用了一种不整洁的方法,在传统的RDBMS世界中,我无法访问任何系统表。我使用show tables获取所有表的列表,然后使用excel生成maxdate_,标记为_invalid,并添加一个别名列作为表名,然后应用union all生成结果

select max(date_marked_invalid) as dt, 'table-1' as table from table-1 union all
select max(date_marked_invalid) as dt, 'table-2' as table from table-2 union all
select max(date_marked_invalid) as dt, 'table-3' as table from table-3 
结果可能看起来像

enter code here
dt        |  table
01-01-2020 table-1
01-02-2020 table-2
一旦有了表列表,就可以像这样格式化所有查询并获得结果。如果这是一个作业任务,并且应该运行作业,那么一些脚本语言或编程语言可以在文件中捕获显示表输出的位置提供帮助,构建这样的查询并获得结果


我希望这种不整洁的方法暂时会有所帮助。

如何创建这样的存储过程?如果有一组固定的表,请使用UNION ALL构造,每个表的最大值为。如果您想要一个动态语句,您可以在存储过程中使用类似于上面的查询的方法生成它,请参阅以获取提示。不幸的是,没有完全灵活的方法将结果值从存储过程中获取到查询中。