主頁 > 資料庫 > 教程 | Datavines 自定義資料質量檢查規則(Metric)

教程 | Datavines 自定義資料質量檢查規則(Metric)

2023-06-27 09:19:33 資料庫

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

在 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

關于Datavane

Datavane 是一個專注于大資料領域的開源組織(社區),由一群大資料領域優秀的開源專案作者共同創建,旨在幫助開源專案作者更好的建設專案、為大眾提供高質量的開源軟體,宗旨是:只為做一個好軟體,目前已經聚集了一批優質的開源專案,涉及到資料集成、大資料組件管理、資料質量等,

Datavane 社區中,所有的專案都是開源開放的,代碼質量和架構設計優質的潛力專案,社區保持開放中立、協作創造、堅持精品,鼓勵所有的開發者、用戶和貢獻者積極參與我們的社區、共同合作,創新創造,建設一個更加強大的開源社區,

官 網: http://www.datavane.org/
Github : https://github.com/datavane

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/556082.html

標籤:其他

上一篇:NetBeans連接SQLServer2008配置

下一篇:返回列表

標籤雲
其他(161691) Python(38254) JavaScript(25515) Java(18265) C(15238) 區塊鏈(8273) C#(7972) AI(7469) 爪哇(7425) MySQL(7270) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5875) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4606) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2437) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1985) HtmlCss(1973) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • 教程 | Datavines 自定義資料質量檢查規則(Metric)

    Metric 是 Datavines 中一個核心概念,一個 Metric 表示一個資料質量檢查規則,比如空值檢查和表行數檢查都是一個規則。Metric 采用插件化設計,用戶可以根據自己的需求來實作一個 Metric。下面我們來詳細講解一下如何自定義`Metric`。 ### 第一步 我們先了解下幾個 ......

    uj5u.com 2023-06-27 09:19:33 more
  • NetBeans連接SQLServer2008配置

    一、配置SQL Server (一)SQL Server配置管理器 1、打開SQL Server配置管理器 (1)檔案路徑,我的是C:\Windows\SysWOW64\mmc.exe, 也可以從開始選單找(如下圖所示) ps網路資源:Windows10 可能在選單欄里找不到SQL server的配 ......

    uj5u.com 2023-06-27 09:19:14 more
  • Spark架構體系

    # Spark架構體系 StandAlone模式是spark自帶的集群運行模式,不依賴其他的資源調度框架,部署起來簡單。 StandAlone模式又分為client模式和cluster模式,本質區別是Driver運行在哪里,如果Driver運行在SparkSubmit行程中就是Client模式,如果 ......

    uj5u.com 2023-06-27 09:18:54 more
  • 日均調度 10W+ 任務實體,DolphinScheduler 在蔚來汽車一站式資料

    ![file](https://img2023.cnblogs.com/other/2685289/202306/2685289-20230626191342850-513894679.png) 大家好我是張金明,在蔚來汽車擔任大資料平臺研發工程師。這次和大家分享的是 Apache DolphinS ......

    uj5u.com 2023-06-27 09:18:28 more
  • 圖書搜索領域重大突破!用Apache SeaTunnel、Milvus和OpenAI提高書

    ![file](https://img2023.cnblogs.com/other/3195851/202306/3195851-20230626190205684-2107268424.jpg) 作者 | 劉廣東,Apache SeaTunnel Committer ## 背景 目前,現有的圖書搜 ......

    uj5u.com 2023-06-27 09:18:12 more
  • 檔案室溫度和濕度控制標準及防控措施技術性八防方案

    檔案館庫房溫濕度調控標準及相應的措施方案 檔案庫房是檔案保管的基本條件,檔案庫房溫濕度與保護檔案,延長檔案壽命有很大關系。 檔案庫房適宜溫濕度標準為:溫度14℃—24℃,相對濕度45%一60 一、庫房溫濕度對檔案的影響 庫房的溫濕度,過高過低都會影響檔案制成材料的耐久性。高溫高濕會加速紙張的老化水解 ......

    uj5u.com 2023-06-27 09:18:04 more
  • 一招帶你吃透MySQL高級

    `MySQL8高級之架構和優化` 讓 ![img](https://image-tuchuang.oss-cn-chengdu.aliyuncs.com/timg.jpg) # 第01章 Linux下MySQL的安裝與使用 ## 1、安裝 ### 1.1、docker安裝 ```shell dock ......

    uj5u.com 2023-06-27 09:15:58 more
  • NetBeans連接SQLServer2008配置

    一、配置SQL Server (一)SQL Server配置管理器 1、打開SQL Server配置管理器 (1)檔案路徑,我的是C:\Windows\SysWOW64\mmc.exe, 也可以從開始選單找(如下圖所示) ps網路資源:Windows10 可能在選單欄里找不到SQL server的配 ......

    uj5u.com 2023-06-27 09:13:45 more
  • 關系型資料庫速度比較(性能基準測驗)及python實作

    https://www.sqlite.org/speed.html 做了SQLite、MySQL和PostgreSQL的速度比較,使用的資料庫版本比較老,但是測驗方法依舊頗有意義。 ![](https://img2023.cnblogs.com/blog/3174021/202306/3174021 ......

    uj5u.com 2023-06-27 09:13:23 more
  • 檔案室溫度和濕度控制標準及防控措施技術性八防方案

    檔案館庫房溫濕度調控標準及相應的措施方案 檔案庫房是檔案保管的基本條件,檔案庫房溫濕度與保護檔案,延長檔案壽命有很大關系。 檔案庫房適宜溫濕度標準為:溫度14℃—24℃,相對濕度45%一60 一、庫房溫濕度對檔案的影響 庫房的溫濕度,過高過低都會影響檔案制成材料的耐久性。高溫高濕會加速紙張的老化水解 ......

    uj5u.com 2023-06-27 09:13:16 more