1. 概述
JAVA脚本用于执行JAVA脚本检查数据:可按需定义执行条件与逻辑,调用系统 API 处理复杂业务场景,灵活满足内置规则无法覆盖的自定义数据质量检查需求。
复杂业务场景用内置规则无法准确检查,为准确检查数据质量,使用JAVA语言编写代码精准找到需要质检的数据进行检查。
2. 操作步骤
1.在质量模型中添加主题表“XXB_DAY_GUID”,定义数据期、数据级次、关键字字段,没有可不定义。
2.新建规则,在质量模型规则库中新建规则,选择“JAVA脚本”,处理内置规则满足不了的数据质量检查需求,点击下一步,进入规则编辑页面。
规则编辑页面,主题表一栏选择上述添加的主题表“XXB_DAY_GUID”,填写Java脚本代码,检查E32字段是否为空,本案例以行数据检查检查方式为例。以下为Java脚本代码:
“package com.esen.edq.spark;
import java.io.Serializable;
import org.apache.spark.sql.Row;
import com.esen.edq.spark.core.rule.script.TableRowData;
import com.esen.eutil.util.StrFunc;
class CheckRow implements Serializable {
private static final long serialVersionUID = -8046849565053039741L;
public boolean checkRowData(Row row, TableRowData rowData) {
String value = row.getAs(rowData.getFieldAlias("E32"));
return !StrFunc.isNull(value);
}
}”
该规则有参数如下:
Ø 代号:系统将根据规则类型系统自动生成,也可能自定义输入。
Ø 分组:选择规则分组,当前规则将添加至选定的分组下。
Ø 主题表:选择波动检查的来源表。
Ø 业务规则:选择规则的业务规则类型。
Ø 脚本代码:需要执行的JAVA脚本代码。
Ø 描述:用户输入规则的详情。
Ø 过滤条件:当对一部分数据进行检查时,可以输入过滤条件表达式。
Ø 问题级别:分为严重、重要、一般。用户可以根据提示选择优先处理哪类问题。
Ø 自动启用:打上勾后表示创建规则后自动设为启用状态,不打勾设为禁用状态。
Ø 权重:输入权重值,用于质量管理绩效打分。
Ø 关联关系:指标表达式或者过滤条件涉及他表时,过滤条件涉及他表时需勾选与之对应的关联关系。
可以点击右下角的查看“JAVA检查说明”,里面有几种接口方法说明。
Row接口方法说明如下:
方法 | 描述 |
fieldIndex(String col) | 通过列名找到在row的位置索引; |
get(int index) | 返回指定索引位置的值,和上述方法结合使用就可以找到对应列名的值,返回的是Object对象; |
getAs(String col) | 返回指定列对应的值; |
getAs(int col) | 返回指定索引对应的值; |
size() | 返回列数。 |
TableRowData接口方法说明如下:
方法 | 描述 |
getPeriod() | 获取此行数据的数据期; |
getDataClass() | 获取此行的数据级次; |
getFieldAlias(String fieldName) | 取此行数据某字段的别名; |
getFieldValue(String fieldName) | 取此行数据某字段的值; |
getLinkFieldValue(String linkId ,String fieldName) | linkId代表关 |
Dataset接口方法说明如下:
方法 | 描述 |
drop(String col) | 删除指定列; |
col(String col) | 返回指定的列,返回的对象是Column类型; |
filter(String condition) | 过滤指定数据,等价于sql的where语句; |
groupBy(Column col) | 分组,等价于sql的group by语句。 |
orderBy(Column col) | 排序,等价于sql的order by语句; |
join(Dataset dataset, String col) | join两个dataset对象,等价于sql的join语句; |
intersect(Dataset dataset) | intersect两个dataset对象; |
except(Dataset dataset) | except两个dataset对; |
union(Dataset dataset) | union两个dataset对象; |
sample(double fraction) | 随机抽样返回一个新的dataset; |
distinct() | 去重; |
count() | 获取总条数; |
isEmpty() | dataset里面数据是否为空; |
first() | 返回第一行的数据; |
limit(int n) | 返回前n条数据组成的dataset对象; |
createTempView(String viewName) | 创建一个临时视图; |
createOrReplaceTempView(String viewName) | 创建或者替换一个临时视图。 |
TableDatasetMgr接口方法说明如下:
方法 | 描述 |
getAnalDataset(String tableName, String orderFields, String whereSql) | 获取分析连接池查询出来的Dataset对象; |
getResultDataset(String tableName, String orderFields, String whereSql) | 获取结果连接池的查询出来的Dataset对象; |
refreshAnalDataset(String tableName, String orderFields, String whereSql) | 获取分析连接池某张表最新查询出来的Dataset对象; |
refreshResultDataset(String tableName, String orderFields, String whereSql) | 获取结果连接池某张表最新查询出来的Dataset对象。 |
CheckResultData接口方法说明如下:
方法 | 描述 |
setRowResult(Dataset dataset) | 添加以行数据做检查的检查结果集; |
setTableResult(Dataset dataset) | 添加以整表数据做检查的检查结果集; |
3.新建质检方案,质检方案页面新建,弹出质检方案流程页面,填写方案标题,下一步将上述规则添加到质检方案中,点击“下一步”,后续设置可跳过,直到成功。
4.执行质检方案,在方案的操作栏点击“执行”,弹出弹框,选择合适的数据期,不同步上期例外,点击“确定”,执行方案后在质量监控页面可查看方案执行结果,选择本例方案,合适的数据期、数据级次和主题表后,下面显示出方案中规则的数据量、错误合计、例外合计、已修复合计等数据,点击操作栏的“查看”可以查看错误合计的所有数据详情。
请先登录