数据库中所有表的Soda Core | checks.yml



目标:在数据库中的所有表上运行checks.yml,隐式地/动态地(不命名100个表(。

Soda的快速入门之后,我已经完成了以下部分:

  • 安装Soda Core
  • 将Soda Core连接到数据源-configuration.yml

现在我关注写一个检查并运行扫描-checks.yml


问题

但是,文档只给出了检查每个表的示例。

4次检查

  1. 表的总和(在数据库中(
  2. 列的总和(在数据库中的所有表中(
  3. 存在表的说明之和
  4. 存在列描述的总和

查询返回一个COUNT()


到目前为止,checks.yml:

# checks for MY_DATABASE:
sql_metrics:
name: num_tables, num_columns
sum_tables query: |
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = '*';
sum_columns query: |
SELECT COUNT(*)
FROM information_schema.columns
WHERE table_name = '*';
sum_tables_descriptions query: |
-- SQL
sum_columns_descriptions query: |
-- SQL

您的支票文件应该看起来像

checks for MY_DATABASE:
- sum_tables > 0:
sum_tables query: |
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema ~~ '%'
- sum_columns > 0:
sum_columns query: |
SELECT COUNT(*)
FROM information_schema.columns            

您的检查必须基于文档中尚未提供的条件(待检查或验证(或过滤器。~~的意思是like,%是通配符。尽管条件all和条件no给出相同的结果,所以where子句是不必要的。

Soda Core 3.0.5
Scan summary:
2/2 checks PASSED: 
MY_DATABASE in postgres
sum_tables > 0 [PASSED]
sum_columns > 0 [PASSED]
All is good. No failures. No warnings. No errors.

或者,您可以使用此脚本动态创建检查文件,使用带有"for each dataset T:"子句的数据集(表(列表,如:

import psycopg2
import time
#File name with timestamp
filePath = '.'
timestr = time.strftime("%Y-%m-%d-%-H%M%S")
fileName = 'checks-' + timestr + '.yml'
try:
conn = psycopg2.connect("dbname=postgres user=postgres password=yourpassword host=localhost")
cur = conn.cursor()
cur.execute("SELECT '    - '||table_name||'n' FROM information_schema.tables WHERE table_schema = 'public' order by 1 limit 5;")
row = cur.fetchone()
with open(fileName,'w') as f:
line="for each dataset T:n  datasets:n"
f.write(line)        
while row is not None:            
f.write(row[0])
row = cur.fetchone()            
cur.close()
line="  checks:n    - row_count > 0"
f.write(line)
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()

相关内容

  • 没有找到相关文章

最新更新