
# 新建数据质量规则
数据质量支持对离线数据的监控，质量规则是数据质量的核心。DataArts Studio系统内置的模板规则共计34种，分为库级规则、表级规则、字段级规则和跨字段级规则、跨源级规则等规则类型，如[表1]所示。
 表1系统内置的规则模板一览表 
| 规则类型 | 维度  | 模板名称               | 适用引擎                                                               | 说明                                                                                                                                      |
|:---|:---|:---|:---|:---|
| 库级   | 完整性 | 数据库空值扫描            | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、ORACLE、RDS、DORIS            | 计算数据库每个表中每个字段的空值字段行数，结果以字段为维度呈现。                                                          |
| 表级   | 准确性 | 表行数                | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 计算数据表的总行数。                                                                                                                              |
| 表级   | 完整性 | 数据表空值扫描            | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 计算数据表中每个字段的空值行数，结果以字段为维度呈现。                                                                                                             |
| 表级   | 有效性 | 近1天波动率             | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、HETUENGINE、ORACLE、RDS、DORIS       | 计算数据表的单表大小、字段分组、相关波动率近一天的规则波动监控。                                                                                                        |
| 表级   | 有效性 | 近7天波动率             | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、HETUENGINE、ORACLE、RDS、DORIS       | 计算数据表的单表大小、字段分组、相关波动率近七天的规则波动监控。                                                                                                        |
| 表级   | 有效性 | 近30天波动率            | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、HETUENGINE、ORACLE、RDS、DORIS       | 计算数据表的单表大小、字段分组、相关波动率近三十天的规则波动监控。                                                                                                       |
| 字段级  | 唯一性 | 字段唯一值              | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 计算数据表中指定字段的唯一值行数。                                                                                                                       |
| 字段级  | 唯一性 | 字段重复值              | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 计算数据表中指定字段的重复值行数（当有多个不同的重复值时，以所有重复值个数的和作为该字段的重复值行数）。                                                                                    |
| 字段级  | 唯一性 | 多字段唯一性校验           | HIVE、SparkSQL、DLI、DWS、GBASE、HETUENGINE                             | 校验数据表中多个字段的组合是否唯一，最多支持10个字段的组合。                                                                                                         |
| 字段级  | 唯一性 | 多字段唯一性校验忽略Null     | HIVE、SparkSQL、DLI、DWS、GBASE、HETUENGINE                             | 校验数据表中多个字段的组合是否唯一，最多支持10个字段的组合，Null值被统计在有效行中。                                                                                           |
| 字段级  | 完整性 | 字段空值               | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 计算数据表中指定字段的空值行数。                                                                                                                        |
| 字段级  | 准确性 | 字段平均值              | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 计算数据表中指定字段的平均值。                                                                                                                         |
| 字段级  | 准确性 | 字段汇总值              | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 计算数据表中指定字段的汇总值。                                                                                                                         |
| 字段级  | 准确性 | 字段最大值              | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 计算数据表中指定字段的最大值。                                                                                                                         |
| 字段级  | 准确性 | 字段最小值              | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 计算数据表中指定字段的最小值。                                                                                                                         |
| 字段级  | 有效性 | 身份证校验              | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 通过内置的正则表达式规则，校验数据表中指定字段的合法情况（如果数据为空，则视为非法字段）。                                                                                           |
| 字段级  | 有效性 | 邮箱校验               | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 通过内置的正则表达式规则，校验数据表中指定字段的合法情况。                                                                                                           |
| 字段级  | 有效性 | 正则表达式校验            | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 通过输入自定义的正则表达式，校验数据表中指定字段的合法情况。                                                                                                          |
| 字段级  | 有效性 | IP地址校验             | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 通过内置的正则表达式规则，校验数据表中指定字段的合法情况。                                                                                                           |
| 字段级  | 有效性 | 电话格式校验             | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 通过内置的正则表达式规则，校验数据表中指定字段的合法情况。                                                                                                           |
| 字段级  | 有效性 | 邮编格式校验             | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 通过内置的正则表达式规则，校验数据表中指定字段的合法情况。                                                                                                           |
| 字段级  | 有效性 | 日期格式校验             | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 通过内置的正则表达式规则，校验数据表中指定字段的合法情况。                                                                                                           |
| 字段级  | 有效性 | 合法性校验              | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 通过输入自定义的正则表达式，校验数据表中指定字段的合法情况。                                                                                                          |
| 字段级  | 有效性 | 枚举值校验              | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 通过输入自定义的枚举值，校验数据表中指定字段的合法情况。                                                                                                            |
| 字段级  | 有效性 | 字段长度校验             | DLI、DWS、GBASE、HETUENGINE                                           | 通过输入字段长度范围，校验表中字段是否在允许范围内。                                                                                                              |
| 字段级  | 有效性 | 字段值范围校验            | DLI、DWS、GBASE、HETUENGINE                                           | 通过输入字段值范围，校验表中字段值是否在允许范围内。                                                                                                              |
| 字段级  | 有效性 | 字段时间校验             | DLI、DWS、GBASE、HETUENGINE                                           | 通过输入字段时间范围，校验表中字段时间是否在允许范围内。 注意，当前仅支持DATE和TIMESTAMP类型的字段，不支持TIME格式。                            |
| 字段级  | 有效性 | 枚举值校验忽略Null        | DLI、DWS、GBASE、HETUENGINE                                           | 通过输入自定义的枚举值，校验数据表中指定字段的合法情况，Null值被统计在有效行中。                                                                                              |
| 字段级  | 有效性 | 正则表达式校验忽略Null      | DLI、DWS、GBASE、HETUENGINE                                           | 通过输入自定义的正则表达式，校验数据表中指定字段的合法情况，Null值被统计在有效行中。                                                                                            |
| 字段级  | 有效性 | 枚举值校验忽略大小写敏感       | DLI、DWS、HETUENGINE                                                 | 通过输入自定义的枚举值，校验数据表中指定字段的合法情况，大小写敏感值被统计在有效行中。                                                                                             |
| 字段级  | 有效性 | 枚举值校验忽略Null忽略大小写敏感 | DLI、DWS、HETUENGINE                                                 | 通过输入自定义的枚举值，校验数据表中指定字段的合法情况，Null值和大小写敏感值被统计在有效行中。                                                                                       |
| 跨字段级 | 一致性 | 字段一致性校验            | DLI、DWS、HIVE、SparkSQL、CLICKHOUSE、GBASE、HETUENGINE、ORACLE、RDS、DORIS | 针对相同数据源的不同字段，校验数据表中指定字段的值是否与参考字段所在表中的值一致。                                                                                               |
| 跨字段级 | 准确性 | 跨字段时间校验            | DLI、DWS、GBASE、HETUENGINE                                           | 针对相同数据源的不同字段，通过输入大小关系符号，校验数据表中指定字段是否与参考字段的时间大小关系是否符合预期。 注意，当前仅支持DATE和TIMESTAMP类型的字段，不支持TIME格式。 |
| 跨源级  | 一致性 | 跨源字段一致性校验          | HETUENGINE                                                         | 基于Hetu连接，针对不同数据源的不同字段，校验数据表中指定字段是否与参考字段一致。                                                                                              |
   
系统内置的规则模板不可编辑和查看发布历史。
当系统内置规则模板不足以满足您的需求，您可根据实际需要创建规则。目前创建规则的方式包括自定义模板和自定义规则：
![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
自定义规则模板是很多用户可能都要使用的数据，不能随意进行修改，开发者只有查询权限，如果要修改规则模板，请联系管理员进行修改。
- 自定义模板：在"数据质量监控 \> 规则模板"处，新建规则模板。新建的规则模板系统会自动被划分为对应的规则类型（表级、字段级、跨字段级和多表多字段），模板类型显示为自定义模板。新建质量/对账作业应用自定义模板与其他内置模板选择方式相同，规则类型选择为"表级规则"、"字段级规则"、"跨字段级规则"或"多表多字段规则"后即可选择自定义模板，支持进行异常数据输出，不支持质量评分。
- 自定义规则：在创建质量作业时，"规则类型"选择为"自定义规则"，然后您可以通过输入完整的SQL语句，定义如何对数据对象进行数据质量监控。
  ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
  SQL语句可以包含同一数据库下的多张表，但不同数据库的表无法共存。
  
 
本文以新建自定义模板为例，说明如何创建规则。如果您需要新建自定义规则，请直接参考[新建数据质量作业](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0712.html)进行自定义规则质量作业的创建。
1. （可选）选择"数据质量监控 \> 规则模板"，新建目录。如果已存在可用的目录，可以不用新建目录。注意，规则模板、质量作业和对账作业的目录为同一目录，择一操作即可。 
   当前系统支持"新建目录"和"同步主题为目录"两种方式：
   选择"新建目录"时，直接在目录处单击![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001438355269.png)，输入目录名称，即可完成目录新建。直接新建目录的最大深度拓展为7层。
   图1新建目录   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001387836528.png)
   
   
   选择"同步主题为目录"时，在目录处单击![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001388315656.png)，即可将[数据架构处的主题](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0603.html)同步到目录中（仅支持同步"已发布"状态的主题）。同步后的主题目录与数据架构发布后主题一致，按照主题层级如![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001438476997.png)、![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001387997708.png)等进行展示。
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
   1. 直接新建的普通目录不受同步影响。但当普通目录名称与主题名称冲突时：
      - 主题首次同步名称冲突时，会将普通目录修改为主题目录属性，带上主题层级如![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001388160892.png)、![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001438240989.png)等进行展示。
      
      - 主题修改后再次同步名称冲突时，会出现同步失败的情况。
       
   
   2. 不支持变更自动同步。即数据架构处的主题或主题层级变更并发布后，需要手动再次单击![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001438640561.png)才能同步到主题目录。
      特殊的，数据架构处的主题或主题层级删除后，手动同步后目录不会删除，仅去除主题目录属性，作为普通目录进行展示。
      
   
   3. 完成同步后，若有同步失败的主题，系统会自动弹出同步结果明细，可查看同步失败的主题名称。
    
   图2同步主题为目录   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001438475733.png)
   
   
   
2. 在"规则模板"页面，单击"新建"，在弹出的新建规则模板页面中进行配置。 
   图3新建规则模板   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001438474849.png "点击放大")
   
   
   
3. 在弹出的新建规则模板页面中输入规则模板名称，选择规则匹配的维度，定义SQL模板并对输出结果进行说明。 
   - 维度：数据质量支持从完整性、有效性、及时性、一致性、准确性、唯一性六个维度进行单列、跨列、跨行和跨表的分析。自定义质量规则时，请对此规则进行维度匹配。
   
   - 所属目录：选择该规则模板所在的目录。
   
   - 标签：选择所需的标签。标签是在数据地图组件中定义的标签。如果未使用数据地图组件，则标签功能不生效。
   
   - 描述：对此自定义模板进行简单说明。
   
   - 定义关系：输入SQL语句，实现对数据的查找。其中，${Schema_Table1}表示质量/对账作业中所选的表，${Column1}为${Schema_Table1}中所选的字段，${Schema_Table2}仅当定义跨字段级规则时存在，表示质量作业中所选的参考表，${Column2}为${Schema_Table2}中所选的字段。系统支持对定义关系进行语义校验。
     ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
     在自定义规则模板时，在定义关系时，如果出现非数字时，只能输出运行结果，不能进行四则运算、逻辑运算和绝对值。
     自定义规则模板的定义关系目前最多支持10张表20个字段。
     自定义的SQL表达式有如下要求：
     1. 关系表达式中最多支持五列输出。
     
     2. 支持最多两张表的入参和两个字段的入参。注：${Column1}为 ${Schema_Table1}的入参 ，${Column2}为${Schema_Table2}的入参，内置逻辑指定。
     
     3. 如果结果查到多行，只使用第一行数据。
     
     4. 不支持使用.连接表和字段，如${Schema_Table2}.${Column1}.${Input_String1}。
     
     5. 非多表多字段表达式中参数只能使用：${Schema_Table1}、${Schema_Table2}、${Column1}、${Column2}，且不要使用表别名。
     
     6. 多表多字段表达式中参数可以使用：${Schema_Table1}、${Schema_Table2}、${Schema_Table3}、...${Schema_Table5}、${Column1}、${Column2}，${Column3}、...${Column20}、${Input_String1}、${Input_String2}、...${Input_String5}，且不要使用表别名。
      
     例如统计表行数，输入select count(${Column1}) from ${Schema_Table1}。其中${Column1}通过单击"添加字段参数"生成，${Schema_Table1} 通过单击"添加库表参数"生成。
     单击![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001619030268.png)，开启"添加输入参数"，可以在SQL语句中灵活配置输入参数。
     例如字段匹配配置表中的行数，输入select count(1) from ${Schema_Table1} where ${Column1} regexp ${Input_String1}。其中${Column1}通过单击"添加字段参数"生成，${Schema_Table1} 通过单击"添加库表参数"生成，${Input_String1}通过单击"添加输入参数"生成。
     ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
     配置多表多字段规则模板时，目前仅支持最多5个库表、20个字段、5个输入参数。
     
   
   - 输出结果说明：对SQL获得结果的每一列进行说明，与关系定义的输出结果顺序一一对应，列说明之间用英文逗号进行分隔。 例如当定义关系设置为：select max(${Column1}),min(${Column2}) from ${Schema_Table1}，则输出结果说明可写为"最大值，最小值"，注意输入顺序。
     
   
   - 评分公式：此处输入评分公式。自定义模板在此处输入评分公式后，可以参与质量评分，在质量报告中显示评分和规则。 示例：${1}/${2}，其中${1}和${2}分别表示第1列输出结果和第2列输出结果；公式的返回值范围是\[0,1\]。
     
   
   - 异常表模板：此处需输入完整的SQL语句，指定输出哪些数据是异常数据。其中，${Schema_Table1}通过单击"添加库表参数"生成，表示原始表的表名；${Column1}通过单击"添加字段参数"生成，表示原始表中所选的字段；${Output_Columns}通过单击"添加输出参数"生成，表示从原始表中输出到异常表中的字段。系统支持对异常表模板进行语义校验。
     ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
     开启"多表多字段"开关后，"异常表模板"参数不显示，不支持配置。
     
   
   
   例如，有一张涉及金额的表，表中"is_test"字段用于标识该条数据是否为测试数据（0为正式数据，1为测试数据）。期望计算正式数据的金额最小值，最大值，平均值以及总和。则自定义模板可设置如下：
   - 维度：准确性。
   
   - 所属目录：/全部/。
   
   - 描述：计算正式数据的金额最小值，最大值，平均值以及总和。
   
   - 定义关系：输入如下SQL语句，计算正式数据的金额最小值，最大值，平均值以及总和。其中${Schema_Table1}表示质量作业中所选的表，${Column1}表示${Schema_Table1}中所选的字段。
     ```
     select 
     min(${Column1}),
     max(${Column1}),
     ROUND(avg(${Column1}),2),
     sum(${Column1}) 
     from ${Schema_Table1} 
     where is_test='0'
     ```
     
   
   - 输出结果说明：最小值，最大值，平均值，总和。
   
   - 异常表模板：输入如下SQL语句，将正式数据中金额小于10对应的${Output_Columns}列作为异常表数据输出。其中${Output_Columns}表示质量作业中异常表参数已选择的字段。
     ```
     select ${Output_Columns} from ${Schema_Table1} where ${Column1}<10 and is_test='0'
     ```
     
   
   
   图4自定义规则模板关键参数   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001614492337.png "点击放大")
   
   
   
4. 单击"确定"后，系统默认发布此规则模板，版本名称默认为V1.0。
#### 编辑规则模板
![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
自定义规则模板是很多用户可能都要使用的数据，不能随意进行修改，开发者只有查询权限，如果要修改规则模板，请联系管理员进行修改。
自定义规则模板支持直接修改规则模板内容并进行发布。同时，可以选择下线历史版本且将待下线历史版本关联的作业迁移到新版本上。具体请参见如下操作。
![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
编辑规则模板时，编辑界面增加了"版本名称"和"关联作业"两个参数。
1. 选择"数据质量监控 \> 规则模板"，在规则模板列表中找到待修改的规则模板，单击操作列的"编辑"进入编辑规则模板界面。 
   图5编辑规则模板   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001122225523.png "点击放大")
   
   
   
2. 支持修改维度，修改输出结果说明和重新定义关系。
3. 单击"发布"，在提交发布对话框中，选择发布的版本类型，重新设置版本名称，并确认发布。 
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
   - 发布新版本时，需要修改版本名称。
   
   - 发布当前版本时，可以不修改版本名称，之前老的版本会自动生成为历史版本。
    
   图6发布新版本   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001096446173.png "点击放大")
   
   
   
4. 提交发布后，单击操作列的"发布历史"，可以查看该规则模板的发布记录，支持查看版本变化信息、修改版本名称、下线对应版本等。 
   图7发布历史界面   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001132725437.png "点击放大")
   
   
5. 如需下线历史版本，单击历史版本最右侧的"下线"按钮。 
   - 如果该版本没有关联作业，单击确认即可下线。
   
   - 如果该版本存在关联作业，需要选择迁移版本，将新版本与作业关联后，单击确认才能完成下线。
     图8迁移版本并下线   
     ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001123060971.png "点击放大") 
   
   
   
   
6. 发布历史处支持进行版本比对，直观展示修改点。 
   图9比对版本   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0266105668.jpg "点击放大")
   
   
 
#### 导出规则模板
系统支持将自定义的规则模板批量导出，一次最多可导出200个规则模板。
1. 选择"数据质量监控 \> 规则模板"，选择要导出的自定义规则模板。
2. 单击"导出"，弹出"导出规则模板"对话框。
3. 单击"导出"，切换到"导出记录"页签。
4. 在导出文件列表中，单击最新导出文件对应的"下载"，可将规则模板的Excel表格下载到本地。
 
#### 导入规则模板
系统支持将自定义的规则模板批量导入，一次最大可导入4MB数据的文件。
1. 选择"数据质量监控 \> 规则模板"，单击"导入"，弹出"导入规则模板"对话框。 
   图10导入规则模板   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001438648697.png "点击放大")
   
   
   
2. 在"导入配置"页签，选择模板名称重名策略。 
   - 终止：如果模板名称有重复，则全部导入失败。
   
   - 跳过：如果模板名称有重复，会忽略后继续导入。
   
   
   
   
3. 单击"上传文件"，选择准备好的数据文件。 
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
   可通过如下两种方式填写数据文件：
   - (推荐使用) 通过"导出"功能，可将数据直接/或修改后批量导入系统。
   
   - 通过"下载Excel模板"，将数据填写好再导入至系统中。
    
   
   
4. 配置目录的映射资源信息，选择导入后的规则模板存储目录。如不选择，默认使用原映射资源信息。 
   图11配置映射资源信息   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001388006160.png "点击放大")
   
   
   
5. 单击"导入"，将填好的Excel表格模板导入到系统。
6. 单击"导入记录"页签，可查看对应的导入记录。
 
