Snowflake // 如何计算 DEV 和 PROD 数据库给定模式中每个视图的记录

问题描述 投票:0回答:1

我想比较数据库之间给定模式中每个视图的记录数:DEV 和 PROD。目标是验证相应的视图(DEV 和 PROD 中)是否具有相同的记录数。

假设我们有这样的东西:

数据库_DEV.Schema.View01

数据库_DEV.Schema.View02

数据库_DEV.Schema.View03

数据库_PROD.Schema.View01

Database_PROD.Schema.View02

数据库_PROD.Schema.View03

因此我想要一张像这样的表格:

视图名称 数据库_DEV 数据库_产品
查看01 345 345
查看02 450 450
查看03 555 666

视图名称应从 INFORMATION_SCHEMA 表动态获取:

SELECT TABLE_NAME
FROM Database_PROD.INFORMATION_SCHEMA.TABLES
WHERE 1=1
AND TABLE_CATALOG = 'Database_PROD'
AND TABLE_TYPE = 'VIEW'
AND TABLE_SCHEMA = 'Schema'

我假设我可以使用光标得到结果?

感谢您的帮助。

snowflake-cloud-data-platform cursor information-schema
1个回答
0
投票

我假设我可以使用光标得到结果?

你可以,但使用 SQL 生成器和 UNION ALL 可能会更容易。

SQL 生成器看起来像这样(更改模式以适应):

SELECT listagg('select \'' || TABLE_NAME || '\' as VIEW_NAME, (select count(*) from Database_PROD.PROD.' || TABLE_NAME || ') as PROD_COUNT, (select count(*) from Database_PROD.DEV.' 
               || TABLE_NAME  || ') as DEV_COUNT\n', 'UNION ALL\n') as SQL_TO_RUN
FROM INFORMATION_SCHEMA.TABLES
WHERE 1=1
AND TABLE_CATALOG = 'TEST'
AND TABLE_TYPE = 'VIEW'
AND TABLE_SCHEMA = 'PUBLIC'
;

SQL 生成器将生成一行和一列,以便复制、粘贴或在脚本中使用。它看起来像这样:

select 'MY_VIEW' as VIEW_NAME, (select count(*) from MY_VIEW) as PROD_COUNT, (select count(*) from MY_VIEW) as DEV_COUNT
UNION ALL
select 'MY_VIEW33' as VIEW_NAME, (select count(*) from MY_VIEW123) as PROD_COUNT, (select count(*) from MY_VIEW123) as DEV_COUNT
UNION ALL
select 'MY_VIEW33' as VIEW_NAME, (select count(*) from MY_VIEW123) as PROD_COUNT, (select count(*) from MY_VIEW123) as DEV_COUNT
UNION ALL
select 'MY_VIEWS2' as VIEW_NAME, (select count(*) from MY_VIEWS2) as PROD_COUNT, (select count(*) from MY_VIEWS2) as DEV_COUNT

运行它会产生如下输出:

|VIEW_NAME|PROD_COUNT|DEV_COUNT|
|:---|---:|---:|
|MY_VIEW|25|25|
|MY_VIEW33|25|25|
|MY_VIEW33|25|25|
|MY_VIEWS2|50|50|

您甚至可以让 SQL 生成器添加另一列来比较 PROD_COUNT 和 DEV_COUNT,并在它们匹配或不匹配时报告 true 或 false。

© www.soinside.com 2019 - 2024. All rights reserved.