教程 | Datavines 自定义数据质量检查规则(Metric)

这篇具有很好参考价值的文章主要介绍了教程 | Datavines 自定义数据质量检查规则(Metric)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Metric 是 Datavines 中一个核心概念,一个 Metric 表示一个数据质量检查规则,比如空值检查和表行数检查都是一个规则。Metric 采用插件化设计,用户可以根据自己的需求来实现一个 Metric。下面我们来详细讲解一下如何自定义Metric

第一步

我们先了解下几个接口和抽象类,它们是实现自定义 Metric 的关键。

SqlMetric 接口

SqlMetric接口中定义了规则的各种属性和操作的接口。

@SPI
public interface SqlMetric {
    // 中文名
    String getName();
    // 英文名
    String getZhName();
    // 根据系统的语言进行名字返回
    default String getNameByLanguage(boolean isEn) {
        return isEn ? getName() : getZhName();
    }
    // 规则属于哪个维度,比如准确性、唯一性等等
    MetricDimension getDimension();
    // 规则的类型,包括单表检查、单表自定义检查
    MetricType getType();
    // 规则的级别,比如表级别、列级别
    default MetricLevel getLevel() {
        return MetricLevel.NONE;
    }
    // 是否支持错误数据输出
    boolean isInvalidateItemsCanOutput();

    /**
     * 获取不符合规则的数据的SQL语句
     * @return ExecuteSql
     */
    ExecuteSql getInvalidateItems(String uniqueKey);

    /**
     * 计算实际值的SQL语句
     * @return ExecuteSql
     */
    ExecuteSql getActualValue(String uniqueKey);

    /**
     * 实际值的字段名
     */
    default String getActualName() {
        return "actual_value";
    }
    // 实际值的类型,比如数字,百分比或者列表
    default String getActualValueType() {
        return MetricActualValueType.COUNT.getDescription();
    }
    // 对参数进行检查并输出检查结果
    CheckResult validateConfig(Map<String,Object> config);
    //规则所需要的参数
    Map<String, ConfigItem> getConfigMap();
    //构造规则前需要做的检查
    void prepare(Map<String,String> config);

    default String getIssue() {
        return "";
    }
    // 适合哪些字段类型
    List<DataVinesDataType> suitableType();
    // 是否支持多选,比如表行数检查支持多张表
    default boolean supportMultiple() {
        return false;
    }
    // 对规则参数的重新构造,配合表行数多张表检查
    default List<Map<String,Object>> getMetricParameter(Map<String,Object> metricParameter) {
        return Collections.singletonList(metricParameter);
    }
}

BaseSingleTable 抽象类

BaseSingleTable是实现了 SqlMetric 接口的抽象类,实现了表级别检查规则中所需要参数的添加、错误数据SQL语句构造和实际值计算SQL语句构造和对过滤条件的处理等。

  • 这里定义了获取不符合规则的数据的基础SQL语句,判断类型的规则比如正则表达式检查和枚举值检查,只需要在基础SQL语句后面添加过滤条件即可。
    protected StringBuilder invalidateItemsSql = new StringBuilder("select * from ${table}");
  • 实际值计算SQL语句默认是计算不符合规则数据的行数
String actualValueSql = "select count(1) as actual_value_"+ uniqueKey +" from ${invalidate_items_table}"; 
  • 计算平均值、汇总值等统计类型的规则需要重新实现getActualValue()中的ExecuteSql
public abstract class BaseSingleTable implements SqlMetric {
    // 这里定义了获取不符合规则的数据的基础 SQL 语句,判断类的规则比如正则表达式和枚举值检查,只需要在基础SQL后面添加过滤条件即可。
    protected StringBuilder invalidateItemsSql = new StringBuilder("select * from ${table}");

    protected List<String> filters = new ArrayList<>();

    protected HashMap<String,ConfigItem> configMap = new HashMap<>();

    protected Set<String> requiredOptions = new HashSet<>();

    public BaseSingleTable() {
        configMap.put("table",new ConfigItem("table", "表名", "table"));
        configMap.put("filter",new ConfigItem("filter", "过滤条件", "filter"));

        requiredOptions.add("table");
    }

    @Override
    public ExecuteSql getInvalidateItems(String uniqueKey) {
        ExecuteSql executeSql = new ExecuteSql();
        executeSql.setResultTable("invalidate_items_" + uniqueKey);
        executeSql.setSql(invalidateItemsSql.toString());
        executeSql.setErrorOutput(isInvalidateItemsCanOutput());
        return executeSql;
    }

    @Override
    public ExecuteSql getActualValue(String uniqueKey) {
        ExecuteSql executeSql = new ExecuteSql();
        executeSql.setResultTable("invalidate_count_" + uniqueKey);
        String actualValueSql = "select count(1) as actual_value_"+ uniqueKey +" from ${invalidate_items_table}";
        executeSql.setSql(actualValueSql);
        executeSql.setErrorOutput(false);
        return executeSql;
    }

    @Override
    public CheckResult validateConfig(Map<String, Object> config) {
        return ConfigChecker.checkConfig(config, requiredOptions);
    }

    @Override
    public void prepare(Map<String, String> config) {
        if (config.containsKey("filter")) {
            filters.add(config.get("filter"));
        }

        addFiltersIntoInvalidateItemsSql();
    }

    private void addFiltersIntoInvalidateItemsSql() {
        if (filters.size() > 0) {
            invalidateItemsSql.append(" where ").append(String.join(" and ", filters));
        }
    }

    @Override
    public MetricLevel getLevel() {
        return MetricLevel.TABLE;
    }
}

BaseSingleTableColumn 抽象类

BaseSingleTableColumn是列级别的抽象实现类,主要是添加列级别规则的通用参数。

public abstract class BaseSingleTableColumn extends BaseSingleTable {

    public BaseSingleTableColumn() {
        super();
        configMap.put("column",new ConfigItem("column", "列名", "column"));
        requiredOptions.add("column");
    }

    @Override
    public Map<String, ConfigItem> getConfigMap() {
        return configMap;
    }

    @Override
    public MetricLevel getLevel() {
        return MetricLevel.COLUMN;
    }

    @Override
    public boolean isInvalidateItemsCanOutput() {
        return false;
    }
}

第二步

了解完上面的三个基础类以后,自定义一个Metric就变得格外简单了。

基础工作

在 datavines-metric-plugins 下创建一个新规则的 module

教程 | Datavines 自定义数据质量检查规则(Metric)

在 pom.xml 中添加

 <dependency>
     <groupId>io.datavines</groupId>
     <artifactId>datavines-metric-base</artifactId>
     <version>${project.version}</version>
 </dependency>

以 枚举值检查 规则为例来讲解

  • 判断要实现的规则的级别,因为枚举值检查是列级别,所以继承 BaseSingleTableColumn 即可。
  • 在构造函数中的configMap添加enum_list参数用于返回给前端进行展示,在requiredOptions添加enum_list用于参数的检查。
  • 实现英文名、中文名、规则维度、规则类型这些基础的属性。
  • 因为枚举值检查规则是为了找出在枚举值列表中的数据,所以只需要在fileters这个数组里面加入(${column} in ( ${enum_list} ))prepare()方法会自动进行不符合规则的SQL语句构造。
  • 实现suitableType()方法添加规则适用的字段类型。
public class ColumnInEnums extends BaseSingleTableColumn {

    public ColumnInEnums(){
        super();
        configMap.put("enum_list",new ConfigItem("enum_list", "枚举值列表", "enum_list"));
        requiredOptions.add("enum_list");
    }

    @Override
    public String getName() {
        return "column_in_enums";
    }

    @Override
    public String getZhName() {
        return "枚举值检查";
    }

    @Override
    public MetricDimension getDimension() {
        return MetricDimension.EFFECTIVENESS;
    }

    @Override
    public MetricType getType() {
        return MetricType.SINGLE_TABLE;
    }

    @Override
    public boolean isInvalidateItemsCanOutput() {
        return true;
    }

    @Override
    public void prepare(Map<String, String> config) {
        if (config.containsKey("enum_list") && config.containsKey("column")) {
            filters.add(" (${column} in ( ${enum_list} )) ");
        }
        super.prepare(config);
    }

    @Override
    public List<DataVinesDataType> suitableType() {
        return Arrays.asList(DataVinesDataType.NUMERIC_TYPE, DataVinesDataType.STRING_TYPE, DataVinesDataType.DATE_TIME_TYPE);
    }
}

第三步

非常重要的一步

  • 在 resources 目录下创建META-INF/plugins目录。
  • 在 plugins 目录下创建文件并且命名为io.datavines.metric.api.SqlMetric
  • 在文件中添加column_in_enums=io.datavines.metric.plugin.ColumnInEnums

第四步

打包成jar放到 datavines 目录下的libs目录下即可。

收工!自定义 Metric 就这样轻松搞定了。

加入我们

Datavines 的目标是成为更好的数据可观测性领域的开源项目,为更多的用户去解决元数据管理和数据质量管理中遇到的问题。在此我们真诚欢迎更多的贡献者参与到社区建设中来,和我们一起成长,携手共建更好的社区。

  • 项目地址: https://github.com/datavane/datavines
  • 问题和建议: https://github.com/datavane/datavines/issues
  • 贡献代码: https://github.com/datavane/datavines/pulls

教程 | Datavines 自定义数据质量检查规则(Metric)

关于Datavane

Datavane 是一个专注于大数据领域的开源组织(社区),由一群大数据领域优秀的开源项目作者共同创建,旨在帮助开源项目作者更好的建设项目、为大众提供高质量的开源软件,宗旨是:只为做一个好软件。目前已经聚集了一批优质的开源项目,涉及到数据集成、大数据组件管理、数据质量等。

Datavane 社区中,所有的项目都是开源开放的,代码质量和架构设计优质的潜力项目。社区保持开放中立、协作创造、坚持精品,鼓励所有的开发者、用户和贡献者积极参与我们的社区、共同合作,创新创造,建设一个更加强大的开源社区。

官 网: http://www.datavane.org/
Github : https://github.com/datavane文章来源地址https://www.toymoban.com/news/detail-501678.html

到了这里,关于教程 | Datavines 自定义数据质量检查规则(Metric)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 详解【计算机类&面试真题】军队文职考试——第8期:OSI的七层模型 | 数据通信的三种方式 | 通信网络的检查方法,附Python进行网络连通性检查、带宽测试、端口扫描、链路质量测试、安全性扫描

      不知道命运是什么,才知道什么是命运。———史铁生     🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌟[2] 2022年度博客之星人工智能领域TOP4🌟   🏅[3] 阿里云社区特邀专家博主🏅   🏆[4] CSDN-人工智能领域优质创作者🏆

    2024年01月25日
    浏览(52)
  • ES度量聚合(ElasticSearch Metric Aggregations),Java开发自学教程

    .value( (new MultiValuesSourceFieldConfig.Builder()) .setFieldName(“num”) .setMissing(0) .build() ) .weight( (new MultiValuesSourceFieldConfig.Builder()) .setFieldName(“num”) .setMissing(1) .build() ) // .valueType(ValueType.LONG) ; avg.toString(); sourceBuilder.aggregation(avg); sourceBuilder.size(0); sourceBuilder.query( QueryBuilders.termQuery(“

    2024年04月14日
    浏览(65)
  • 袋鼠云代码检查服务,揭秘高质量代码背后的秘密

    质量是产品的生命线,代码检查是软件开发过程中至关重要的一环,它可以帮助我们发现并纠正潜在的错误,提高软件质量,降低维护成本。 在袋鼠云产品中也存在这个问题,由于离线数据开发人员 SQL 水平不一,导致代码书写混乱、SQL 代码运行问题较多。本文将介绍在离线

    2024年02月08日
    浏览(55)
  • 这五款牛逼的 IDEA 插件,堪称代码质量检查利器!

    随着业务的发展,系统会越来越庞大,原本简单稳定的功能,可能在不断迭代后复杂度上升,潜在的风险也随之暴露,导致最终服务不稳定,造成业务价值的损失。而为了减少这种情况,其中一种比较好的方式就是提高代码质量,比如通过代码审查,从而降低错误风险,但是

    2024年04月16日
    浏览(52)
  • 【原理图专题】OrCAD Capture 设计规则(DRC)检查

    在原理图设计完成后,需要进行DRC检查,DRC检查能协助工程师快速检查原理图的物理、电气规则是否正确,能快速定位错误和原因。 DRC 检查从Capture 工具栏中如下图红框所示的图标中Design Rules Check进入 进入后将打开DRC窗口,有四个选项卡。分别是Design Rules Options、Electrical

    2023年04月22日
    浏览(80)
  • 基于misra-c-2012规则在vscode下集成cppcheck开源工具实现代码静态检查

    依赖工具: 1、cppcheck工具 2、vscode下安装C/C++ Advanced Lint扩展 3、python工具 双击后软件自行安装在:C:Program FilesCppcheck 添加系统路径步骤 2.1、在vscode软件中点击设置按钮,选择“设置”选项 2.2、搜索“@ext:jbenden.c-cpp-flylint”然后“settings.json”中编辑 2.3、在settings.json中添加这

    2024年02月09日
    浏览(45)
  • ThingsBoard教程(三九):规则节点解析 根据经纬度过滤数据 GPS geofencing filter

    这篇文章 介绍 GPS geofencing filter 节点, 根据经纬度来过滤通过规则链的数据。 通过基于GPS的地理围栏过滤传入的消息。从传入消息中提取纬度和经度参数,并根据配置的范围进行检查。 配置: 纬度键名称 (Latitude key name)- 包含位置纬度的消息字段的名称; 经度键名称( Long

    2024年02月03日
    浏览(53)
  • TDengine学习(1):采集量(Metric),标签(label),数据采集点,表,超级表,子表、库

    因为TDengine是面向物联网诞生的一种数据库,所以在一些概念的命名上有一点相应的特色。 比如需要对一辆高铁上的各种信息进行采集,采集信息存入数据库中。我们可以对高铁车厢内的一些数据进行采集,比如:车厢内温度、车厢内湿度、车厢内噪音…;也可以对车厢外即

    2024年02月10日
    浏览(32)
  • elasticsearch[七]:ES评分规则详解[查询评分规则、自定义评分规则]

    因为需要对搜索结果进行一个统一化的评分,因此需要仔细研究 ES 本身的评分规则从而想办法把评分统一。 省流:无法确切统一化 之前有说过 ES 的查询评分原理,那么仔细思考之后就会发现,长文本搜索对应的 score 会比短文本搜索的 score 高很多:score = 单个分词评分之和

    2024年01月20日
    浏览(83)
  • 【mongodb】--自定义排序规则

    最近项目接到一个功能点,需要对状态值status字段按照规则排序。这个status在表存储的是String纯字母,另外排序要求又不能按照字典排序方法。那这种问题如何解决? MongoDB 暂时只支持按照某些字段的升序或者降序排列 。但是,在某些特别场景下, 比如对中文有要求按照指定

    2024年02月09日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包