数据质量框架

contessa的Python项目详细描述


目录

数据质量框架

短期使用

fromcontessaimportContessaRunner,NOT_NULL,GT,SQLno_bags_sql="""	SELECT CASE WHEN is_no_bags_booking = 'T' AND bags > 0 THEN false ELSE true END	FROM {{table_fullname}};"""contessa=ContessaRunner("postgres://:@localhost:5432")RULES=[{"name":NOT_NULL,"columns":["status","market","src","dst"],},{"name":GT,"value":0,"columns":["initial_price","turnover_before_refunds",],},{"name":SQL,"sql":no_bags_sql,"description":"No bags booking should have bags = 0",},]ts_nodash="20191010T101010"# should be set dynamically (e.g. by airflow), just example herecontessa.run(raw_rules=RULES,check_table={"schema_name":"temporary","table_name":f"my_table_{ts_nodash}"},result_table={"schema_name":"dq","table_name":"my_table"},)

这将导致表dq.quality_check_my_table,每一行看起来像:

classQualityCheck:id=Column(BIGINT,primary_key=True)attribute=Column(TEXT)rule_name=Column(TEXT)rule_description=Column(TEXT)total_records=Column(INTEGER)failed=Column(INTEGER)median_30_day_failed=Column(DOUBLE_PRECISION)failed_percentage=Column(DOUBLE_PRECISION)passed=Column(INTEGER)median_30_day_passed=Column(DOUBLE_PRECISION)passed_percentage=Column(DOUBLE_PRECISION)status=Column(TEXT)time_filter=Column(TEXT)task_ts=Column(TIMESTAMP(timezone=True),nullable=False,index=True)created_at=Column(DateTime(timezone=True),server_default=text("NOW()"),nullable=False,index=True,)

如何运行测试

$ make test-up  # run postgres + app
$ make testargs="/app/test -s"# args for pytest
$ make test-down  # delete containers + volumes

如果是单元测试(您不需要数据库):

$ pytest test/unit/test_operator.py

上下文

每次运行都有自己的上下文,主要用于模板化最终的sql。这是它的上下文:

{ “table_fullname”:“public.my_cool_table” “任务”:由客户端或DateTime.Now()传递 }

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

推荐PyPI第三方库


热门话题
java本机方法的源代码可用吗?   java如何使父方法抛出异常?   java Android以编程方式设置不同屏幕大小/密度的布局   java如何使用一个变量来管理所有客户端请求   java输入一个txt文件,每行有一组数字   json java从jsonobject获取jsonarray错误   java将一个(WAV)写入一个文件只会说一个单词(最后一个单词)   java Telnet忽略原始字节   proguard java。运行桌面应用程序时出现lang.VerifyError   java用左键移动JLabel?   java如何在jText区域验证选项卡?   文件服务器客户端Javasocket编程中的字符串搜索   java省略了JSTL中的最后一个逗号<c:out>   java如何找到if或else代码已执行的次数?   java JavaScript WebSocket send()方法未执行   浮点数声明上的java标识符预期错误   java这是指二进制搜索算法吗?   编译mod at:reobfJar java时的minecraft问题。util。拉链ZipException:重复条目   java检测特定的震动运动(如图所示:D)