数据质量表示着数据的健康性。
数据质量的高低代表了该数据满足数据消费者期望的程度,这种程度基于他们对数据的使用预期,也就是数据的准确程度是否达到他们的要求。
而数据质量管理就是负责这个的模块。
create table table_increment(
data_date string comment '数据时间分区dt',
database_name string comment '库名',
table_name string comment '表名',
table_type string comment '表类型(全量/增量)',
add_count bigint comment '当日新增数量的记录数',
null_count bigint comment '表空值记录数',
duplicate_count bigint comment '表重复值记录数',
total_count bigint comment '全表记录数'
)
#!/bin/bash
# 校验数据的库名
database_name = $1
# 新增数据所在分区
do_date = $2
# 校验数据的表名
table_name = $3
# 需要校验空值的列名,以 ‘,’分割
null_column = $4
# 初始化SQL查询语句
null_where_sql_str=''
# 将空值校验字段切分为数组
array=(${null_column//,/})
# 遍历数组,拼接空值查询条件
for(( i=0;i< ${#array[@]};i++)) do
if [$i -eq 0];then
null_where_sql_str = "where ${array[i]} is null"
else
null_where_sql_str = "$null_where_sql_str or ${array[i]} is null"
fi
done;
# 执行当日增量数据记录数量SQL查询语句
echo "----------检验当日增量记录数----------"
add_count_query_result = `hive -e "select count(*) from $database_name.$table_name where dt='$do_date'"`
# 取出当日增量数据记录数量
add_count = ${add_count_query_result:3}
# 执行当日全表数量记录数量SQL查询语句
echo "----------检验当日全量记录数----------"
total_count_query_result = `hive -e "select count(*) from $database_name.$table_name"`
# 取出当日全量数据记录数量
total_count = ${add_count_query_result:3}
# 执行全表空值数量记录数量SQL查询语句
echo "----------检验全表空值记录数----------"
total_null_query_result = `hive -e "select count(*) from $database_name.$table_name $null_where_sql_str"`
# 取出全量空值数据记录数量
null_count = ${table_null_query_result:3}
# 执行全表重复值数量记录数量SQL查询语句
echo "----------检验全表重复值记录数----------"
table_duplicate_query_result = `hive -e "select sum(tmp.duplicate_count) a duplicate_sum from(select count(*) as duplicate_count from $database_name.$table_name group by $null_column having count(*)>1) as tmp"`
# 取出当日全量数据记录数量
duplicate_count = ${table_duplicate_query_result:3}
# 将所有数据校验结果插入到表中
echo "----------开始插入数据----------"
hive -e "insert into datacheck.table_increment values('$do_date','$database_name','$table_name','increment_table',$add_count,$null_count,$duplicate_count,$total_count)"
四个参数:
create table table_total_quantity(
data_date string comment '数据时间分区dt',
database_name string comment '库名',
table_name string comment '表名',
table_type string comment '表类型(全量/增量)',
null_count bigint comment '表空值记录数',
duplicate_count bigint comment '表重复值记录数',
total_count bigint comment '全表记录数'
)
#!/bin/bash
# 校验数据的库名
database_name = $1
# 校验数据的表名
table_name = $2
# 需要校验空值的列名,以 ‘,’分割
null_column = $3
# 初始化SQL查询语句
null_where_sql_str=''
# 将空值校验字段切分为数组
array=(${null_column//,/})
# 遍历数组,拼接空值查询条件
for(( i=0;i< ${#array[@]};i++)) do
if [$i -eq 0];then
null_where_sql_str = "where ${array[i]} is null"
else
null_where_sql_str = "$null_where_sql_str or ${array[i]} is null"
fi
done;
# 执行当日全表数量记录数量SQL查询语句
echo "----------检验当日全量记录数----------"
total_count_query_result = `hive -e "select count(*) from $database_name.$table_name"`
# 取出当日全量数据记录数量
total_count = ${add_count_query_result:3}
# 执行全表空值数量记录数量SQL查询语句
echo "----------检验全表空值记录数----------"
total_null_query_result = `hive -e "select count(*) from $database_name.$table_name $null_where_sql_str"`
# 取出全量空值数据记录数量
null_count = ${table_null_query_result:3}
# 执行全表重复值数量记录数量SQL查询语句
echo "----------检验全表重复值记录数----------"
table_duplicate_query_result = `hive -e "select sum(tmp.duplicate_count) a duplicate_sum from(select count(*) as duplicate_count from $database_name.$table_name group by $null_column having count(*)>1) as tmp"`
# 取出当日全量数据记录数量
duplicate_count = ${table_duplicate_query_result:3}
# 将所有数据校验结果插入到表中
echo "----------开始插入数据----------"
hive -e "insert into datacheck.table_total_quantity values('$do_date','$database_name','$table_name','increment_table',$null_count,$duplicate_count,$total_count)"
四个参数:
首先把ODS层中的表分为需要增量检查的表与需要全量检查的表,然后调用相应的脚本。
这样的话,我们可以写一个shell脚本,将质量检测脚本调用每个表的语句都写进去。
#!/bin/bash
# 增量检测
# 分区
data_date = $1
/usr/hdk/table_increment.sh mall $data_date ods_order_detail id,order_id,user_id,sku_id,sku_name,order_price,sku_num,create_time
/usr/hdk/table_increment.sh mall $data_date ods_user_info id,name,birthday,gender,email,user_level,create_time,operate_time
/usr/hdk/table_increment.sh mall $data_date ods_payment_info id,out_trado_no,order_id,user_id,alipay_trado_no,total-amount,subject,payment_type,payment_time
# 全量检测
/usr/hdk/table_total_quantity.sh mall ods_order_info ..,..
...
然后就不用一个一个敲了,直接跑脚本就行。