1.数据探针产生的背景:
在数据开发和接入的过程中,数据开发人员接到一个需求或者一条新的业务线可能需要搭建数仓,做数据处理,然后提供一些指标数据给到需求方,如果是你这边会怎么开始呢?
直接开干?抽表,清洗,分层,建模?
然后发现做完之后,怎么数据各种不对,取不到想要的数据,比如说:业务上说明明一个字段为空比例非常少(1%以内),但是加工出来的数据问题非常多?比如说:空值占比接近30%,然后报表显示的结果就各种问题,然后又往上排查发现,原来是别人提供的数据,或者采集的数据有问题
所以一上来开干,这就是瞎搞。啥也不知道不了解的情况下,对数据源一无所知的情况下,是谁给你勇气直接开干的?干完之后返工成本更大
2.正常的数据开发流程:
接到新的数据需求或者任务的时候,最开始应该需要做一下数据调研,即数据探查(也就是标题上提的数据探针),发现数据潜在的问题。
那数据探针到底要探测哪些内容呢?
3.现状
大多数数据开发人员的处理方法:写大量的sql
比如:
总行数据:select count(*) from table_name;
枚举值:select table_column,count(*) as cnt from table_name group by table_column
等等
4.数据探针
(1)低代码、少量配置即可实现探查任务
(2)将数据探测标准化,避免不同的数据开发人员采用不同的探测标准,做标准统一
(3)快速完成数据探测:30秒完成探测任务配置,2分钟出探测结果
5.功能演示
探测任务配置
探测结果详情
探测代码模板
//主键探测模板 public static final String mainTemplateSql = "select count(distinct column) as distinct_cnt," + "count(*) as cnt" + " from tableName filter"; //空值探测模板 public static final String emptyTemplateSql = "select count(*) as cnt,column_dict from (\n" + "select *,\n" + "case when column is null then 0\n" + "else 1\n" + "end as column_dict\n" + "from tableName\n" + "filter\n" + ")t group by column_dict;"; //枚举值探测模板 public static final String enumTemplateSql = "select * from (\n" + "select count(*) as cnt,column\n" + "from tableName\n" + "filter\n" + "group by column\n" + ")t order by cnt desc limit 50;"; //字段长度探测模板 public static final String lengthTemplateSql = "select len,count(*) as cnt from (\n" + "select *,length(column) as len from tableName filter\n" + ")t group by len;"; //探测信息配置 String tableName = ""; String mainField = ""; String emptyFields = ""; String enumFields = ""; String lengthFields = ""; String filter = "";