一个受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第三方库


热门话题
如何使用外部java程序在minecraft中移动minecraft角色的相机   java输出文本文件中的变量   java LazyLoadingException在我尝试从多通关系获取对象时出现   java json rest API的错误:ClassCastException:org。json。无法将JSONObject强制转换为组织。json。杰索纳雷   java BigInteger。C中的intValue()等价物#   java大写所有字符,但不包括带引号字符串中的字符   java获取特殊字符   javascript为什么Selenium中的所有getX()调用都需要这么长时间?   rabbitmq rabbitmq java客户端并行消费   如何使用selenium Java在popover窗口中提取文本   对象在java中构造一类对象   java Room数据库未实现   json JSONObject可以使用java保存大的格式化双值吗?   有时限的旅行推销员   java HttpsURLConnection openConnection查询   java无法使用Spring@Entity注释创建MySQL表   lambda Java 8仅映射到值类型集合   java提供OSGi服务而不实现接口   java单个对象重写对象数组,不确定原因