数据质量框架

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有没有工具可以将zephyr转换为velocity模板?   java在安卓 studio中从JSON响应中获取值   jvm如何在Java中设计一个好的permgen空间字符串?   java如何防止Rest webservice使用被盗令牌进行身份验证   java无法遍历列表JSTL   找不到用于ResourceServerTokenServices的java Bean SpringSecurityOauth2   java子字符串替换问题   爪哇玻璃鱼3。十、 以编程方式处理任意HTTPSession的终止   java如何检查输入是否为整数,并在最后添加一个命令来重新启动while循环?   引发java ical4j 1.0.6不可解析日期异常   Java等价于Delphi的DBCtrlGrid?   如果发生错误,java将查找下一个预期标记ANTLR 3   java自打开应用程序(创建锁屏)   java为什么netty有自己的ConcurrentHashMap?   Gradle任务中的java拉取和运行依赖项   继承与Java继承的混淆   java使用shell脚本中的版本执行jar   java我无法让Sqlite数据库与带有Maven的JavaFX应用程序IDE Eclipse包正确通信   java控制台日志未通过org打印。阿帕奇。hadoop。mapreduce。作业的waitForCompletion(true)方法   JAVAlang.NoSuchMethodError:apachestorm螺栓中的spring getrequest