数据库中所有表的聚合
Aggregation for all tables in DB
我数据库中的所有 table 都包含相同的列,称之为 date_marked_invalid
。我想在此列中找到所有 table 的 MAX()
。有没有办法获得这些而不必 运行
SELECT MAX(date_marked_invalid) FROM one_particular_table
每个人分开 table?
对于 Postgres 可以做到这一点,但据我所知,这在 Snowflake 上不起作用。
所有列的 MIN/MAX 值都存储在每个 table 的元数据中,但不幸的是在例如中无法访问。 INFORMATION_SCHEMA.COLUMNS
.
如果您创建一个存储过程来迭代 INFORMATION_SCHEMA.COLUMNS
中的 table,它仍然是一个 "metadata only" 操作,但必须手动完成。
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 世界中的任何系统 table。我使用 show tables 获取所有 tables 的列表,然后使用 excel 生成 max(date_marked_invalid)) 以及一个额外的别名列作为 table 名称,然后应用 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
获得 table 的列表后,您可以像这样格式化所有查询并获得结果。如果这是一个工作任务并且应该 运行 一个工作,那么一些脚本语言或编程语言可以在这里提供帮助,其中 show table 输出被捕获在一个文件中,构建这样的查询并获得结果。
我希望这种不整洁的方法可能会暂时有所帮助。
我数据库中的所有 table 都包含相同的列,称之为 date_marked_invalid
。我想在此列中找到所有 table 的 MAX()
。有没有办法获得这些而不必 运行
SELECT MAX(date_marked_invalid) FROM one_particular_table
每个人分开 table?
对于 Postgres
所有列的 MIN/MAX 值都存储在每个 table 的元数据中,但不幸的是在例如中无法访问。 INFORMATION_SCHEMA.COLUMNS
.
如果您创建一个存储过程来迭代 INFORMATION_SCHEMA.COLUMNS
中的 table,它仍然是一个 "metadata only" 操作,但必须手动完成。
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 世界中的任何系统 table。我使用 show tables 获取所有 tables 的列表,然后使用 excel 生成 max(date_marked_invalid)) 以及一个额外的别名列作为 table 名称,然后应用 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
获得 table 的列表后,您可以像这样格式化所有查询并获得结果。如果这是一个工作任务并且应该 运行 一个工作,那么一些脚本语言或编程语言可以在这里提供帮助,其中 show table 输出被捕获在一个文件中,构建这样的查询并获得结果。
我希望这种不整洁的方法可能会暂时有所帮助。