一个受dbt启发的测试和审计工具,适用于不使用dbt的用户。

schemaql的Python项目详细描述


方案

一个受dbt启发的测试和审计工具,适用于不使用dbt的用户。在

安装

  1. 将文件夹复制到本地存储库。在
  2. 在这个文件夹中创建一个新的Python虚拟环境并激活它。在
  3. 在local repo文件夹中,运行pip install -r requirements在这个virtualenv中安装依赖包。在
  4. 在local repo文件夹中,运行pip install -e .在本地安装dev版本。在

现在您应该能够从命令行运行schemaql -h。在

schemaql -h
usage: schemaql [-h][-p None][-c config.yml][-x connections.yml][action]

positional arguments:
  action                Action ('test', or 'generate')

optional arguments:
  -h, --help            show this help message and exit
  -p None, --project None
                        Project
  -c config.yml, --config-file config.yml
                        Config file
  -x connections.yml, --connections-file connections.yml
                        Connections file

配置

SchemaQL需要*.yml进行配置:

connections.yml中,您定义了如何连接到一个或多个数据仓库连接,如下所示:

^{pr2}$

config.yml中,定义以下内容:

  • 日志记录,其中output是相对于项目路径的目录。在
logs:output:logs
  • 一个collector,它是关于如何收集测试结果的定义。当前支持的有:
    • ^{cd9}
    • csv
    • database

对于jsoncsv,只需要提供output路径。在

collector:type:csvoutput:output

对于database集合,需要通过output提供连接名称(来自connections.yml)和目标表:

collector:type:databaseconnection:project-1-snowflakeoutput:test_results

collector连接不需要与项目连接相同的连接,甚至不需要相同的连接类型。因此,可以针对BigQuery运行测试,但可以使用Snowflake或Postgres收集测试结果。在

  • projects这是一个连接的组合,以及要使用的数据库和模式的列表。如果不在数据库键中定义任何模式,则将处理所有模式。在
projects:project-1:connection:project-1-snowflakeschema:database_1:-schema_1-schema_2project-2:connection:project-2-bigqueryschema:my_bg_project_1my_bg_project_2- data_set_1- data_set_2

使用

生成

SchemaQL对yml文件中包含的架构信息运行测试。您可以从头开始编写,使用现有的dbt模式文件,或者使用schemaql来生成它们。在

为所有项目生成架构文件:

schemaql generate

仅为"my_project"生成架构文件:

schemaql generate -p my_project

测试

schemaql test

仅测试"my_project"

schemaql test -p my_project

内置测试

模式测试

非空

检查列值是否为NULL

models:-name:my_tablecolumns:-name:col_1tests:-not_null

关系

检查列值是否与其他实体中列的值匹配

models:-name:my_tablecolumns:-name:col_1tests:-relationships:to:my_other_tablefield:col_1

唯一

检查列值是否唯一

models:-name:my_tablecolumns:-name:col_1tests:-unique

数据测试

可接受的_值

检查列值是否与预定义的接受值列表匹配

models:-name:my_tablecolumns:-name:day_of_weekdescription:tests:-accepted_values:values:['Mon','Tue','Wed','Thu','Fri','Sat','Sun']

至少一个

检查列是否至少有一个值

models:-name:my_tablecolumns:-name:col_1tests:-at_least_one

相等表达式(待定)

频率(待定)

非常数

检查列是否具有多个值

models:-name:my_tablecolumns:-name:col_1tests:-not_constant
近期(待定)

唯一的行

检查表格行是否唯一。 如果未指定columns,则使用所有列。在

models:-name:my_tabletests:-unique_rows:columns:[col_1,col_2,col_3]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaHTTP。请求侦听器   java Selenium webdriver遍历行并仅检索某些列   JavaSpring批处理在启动运行方法之前启动SimpleZoblancher运行方法   maven如何使用Maven2从javadoc生成java源代码?   java为什么我的Unicodont(Slick2D)不画画?   java取消对未使用对象的引用是否会提高冗长方法的性能?   java可执行Jar的画布比使用Eclipse Runner的小   为什么我的for循环在Android studio中与eclipse(java)产生不同的结果   java代码段字节数组到端口号   java在DynamoDB范围键中插入项   java 安卓。看法WindowManager$BadTokenException:无法添加窗口,您的活动正在运行吗?   java我想要两个列表视图同时滚动   java测试数据分离   java Saxon:每次重新部署后都需要重新启动Glassfish