使用逻辑表达式在数据质量定义中定义规则逻辑,或在数据质量规则的输出表中定义列内容。
这些逻辑表达式遵循基本语法,其中根据指定的条件或检查类型对变量 (例如,词或术语) 进行求值。
规则表达式可以由以下类型的元素组成:
每个规则表达式至少由一个检查组成,并且可以组合各种检查。 此外,请检查提供的 样本 以了解如何使用表达式。
变量和字面值
变量和文字是与检查,操作以及常规,日期或时间,数学和字符串元素组合的元素。 根据数据质量定义创建规则时,将逻辑变量绑定到物理数据源。 可以选择以下类型:
元素 | 描述 |
---|---|
var |
逻辑变量。 变量名不区分大小写。 Var1 和 var1 引用同一变量。 名称可以包含以下字符:字母字符 属于 "字母" 类别的 Unicode 字符 数字字符 下划线 (_) 问号 (?) 美元符号 ($) 变量名称的第一个字符必须是字母字符。 名称不能包含句点和空格。 |
0.123 |
数字值。 |
'value' |
必须用单引号括起的字符或字符串和数字。 如果字符串包含单引号,请在单引号前添加反斜杠。 如果字符串包含一个反斜杠,那么请在该反斜杠前使用另一个反斜杠。 |
null |
检查空值。 |
{value1,value2} |
用逗号分隔的值的列表。 |
逻辑
将逻辑块与检查逻辑组合在一起。 基本逻辑是单个检查,例如 field1 exists
。 您可以通过添加条件并使用运算符来连接这些条件来扩展此逻辑。 您可以将表达式的部分括在括号中以指定优先级。 marital_status='married' and (age<18 or age>100)
与 (marital_status='married' and age<18) or age>100
不同
块元素 | 表达式 | 描述 |
---|---|---|
非 [] | 不是 逻辑 | 对表达式求反:not (ucase(PrimaryName) contains 'TEST') |
[] 或 [] | logic1 或 logic2 | logic1 或 logic2 必须为 true:UnhandledNameData not exists OR len(trim(UnhandledNameData)) = 0 |
[] 和 [] | logic1 和 logic2 | logic1 和 logic2 都必须为 true:IF Field1 exists AND len(trim(Field1)) <> 0 THEN Field1 is_numeric |
如果 [] 那么 [] | 如果 check1 ,那么 check2 | 条件表达式:IF NamePrefix exists THEN len(trim(NamePrefix)) > 1 |
如果 [] 那么 [] Else [] | 如果 check1 ,那么 check2 else check2 | 具有备用路径的条件表达式:if age >= 18 then credit_card exists else (not credit_card exists) |
检查
指定各种条件的检查: 逻辑比较,匹配和出现。 检查是求值为布尔值结果的表达式的一部分。
逻辑比较
块元素 | 表达式 | 描述 |
---|---|---|
[ ] < [ ] | X < 伊 | 检查第一个值是否小于第二个值。 |
[ ] <= [ ] | X <= 伊 | 检查第一个值是否小于或等于第二个值。 |
[ ] <> [ ] | X <> 伊 | 检查第一个值是否不等于第二个值。 |
[ ] = [ ] | x = y | 检查第一个值是否等于第二个值。 对于布尔值比较,请使用 0 或 1 作为第二个值。 |
[ ] > [ ] | x > y | 检查第一个值是否大于第二个值。 |
[ ] >= [ ] | x > = y | 检查第一个值是否大于或等于第二个值。 |
源数据和参考数据必须具有兼容的数据类型。 可以使用由标量函数,算术运算和变量组成的表达式作为源数据。 表达式必须求值为字符或字符串数据类型。
对于字符串数据,逻辑比较区分大小写,并忽略您正在检查的值中的所有尾部空格。 不会忽略要检查的值开头的空格。 其他空格或字符或大写值与小写值之间的差异可能会阻止成功验证。 您可以使用 删除 和 修改 来标准化值。
匹配
块元素 | 表达式 | 描述 |
---|---|---|
[] 包含子串 [] | x 包含 y | 检查第一个值是否包含您指定的子串。 注: 包含检查区分大小写。 源数据和参考数据都必须是字符串。 如果字符串是硬编码文字,那么需要引号。 源数据和参考数据都可以是变量或标量函数的结果。 可以使用由标量函数,算术运算和变量组成的表达式作为源数据。 如果执行此操作,请确保每个表达式的求值结果为字符或字符串数据类型。 |
[] 存在 | x 存在 | 检查值是否存在。 |
[] 存在于引用列 [] 中 | x in_reference_column y | 检查指定的引用列中是否存在第一个值。 源数据和参考数据必须具有兼容的数据类型。 |
[] 是使用格式 [] 的日期 | x is_date y | 检查第一个值是否为指定格式的日期。 请参阅 允许的日期格式。 如果手动配置表达式,请使用单引号将格式括起来。 |
[] 在引用列表 [] 中 | x in_reference_list y | 检查第一个值是否在指定的引用列表中。 源数据和参考数据必须具有兼容的数据类型。 |
[] 是数字 | x is_numeric | 检查该值是否为数字值。 此检查接受未格式化的数字或以特定于语言环境的方式格式化的数字,例如 "100 ,000.00"。 缺省情况下,会使用当前语言环境。 |
[] 与数据类 [] 匹配 | x matches_dataclass y | 检查第一个值是否与您指定为第二个值的类代码所标识的数据类相匹配。 要查找特定数据类的类代码,请使用 IBM Knowledge Catalog API GET /v3/data_classes/{artifact_id}/versions/{version_id} 。 您可以在数据类 URL 中找到调用的工件和版本 ID。 类代码位于响应的 entity 部分中。 只能将此检查与基于值的数据类配合使用。 此类数据类在 " 概述 " 选项卡上的 数据匹配 部分中显示 值 作为代码作用域。 您还可以在 预定义数据类详细信息中检查作用域信息。 |
[] 匹配格式 [] | x matches_format y | 检查第一个值是否与指定的格式匹配。 该模式明确定义每个特定字符位置中可接受的内容。 您可以使用以下运算符来构建模式: "A" 表示任何大写字母 "a" 表示任何小写字母 "9" 表示任何 0-9 数字 "x" 表示任何字母数字值,而不考虑其大小写 "I" 表示 CJKV (中文,日文,韩文或越南文) 意图,如 Unicode 标准 所定义。模式字符串中的任何其他字符指示您显式查找输入的精确字符。 源数据必须是字符数据类型。 |
[] 匹配正则表达式 [] | x matches_regex y | 检查第一个值是否与正则表达式指定的模式匹配。 Perl 正则表达式库用于这些类型的求值。 |
出现次数
元素 | 表达式 | 描述 |
---|---|---|
[] 是唯一的 | x 唯一 | 检查该值在列中是否唯一。 |
[] 发生 [] 时间 | x 出现 y | 检查第一个值是否出现在列中指定的次数。 |
[] 至少出现 [] 次 | x 个实例> = y | 检查第一个值是否至少出现在列中指定的次数。 |
[] 最多发生 [] 次 | X occurs<= 伊 | 检查列中是否出现第一个值的次数最多为指定次数。 |
[] 发生时间少于 [] 次 | X occurs< 伊 | 检查列中出现的第一个值是否小于指定的次数。 |
[] 发生时间超过 [] 次 | x 出现> y | 检查列中出现的第一个值是否超过指定的次数。 |
这些检查意味着计算源列上的聚集。 此类操作的运行时间比仅测试单个记录的检查长得多。
操作
将操作元素与检查逻辑组合在一起。 您可以将变量和文字,常规元素,日期和时间,数学和字符串元素与操作元素配合使用。
元素 | 描述 |
---|---|
x + y | 将第一个值添加到第二个值。 |
x - y | 从第一个值中减去第二个值。 |
x * y | 将指定的值相乘。 |
x / y | 将指定的值除。 |
x % y | 使用第一个数字作为红利,使用第二个数字作为除数。 模是第一个数字除以第二个数字的余数。 例如, 7 % 2 计算到 1。 |
x ^ y | 数字的指数值。 例如, 5 ^ 3 正在将 5 提升到第三次幂 (或 555) ,即等于 125。 |
日期和时间
您可以将日期和时间元素与检查逻辑组合在一起。
有效日期格式
无定界符 | 短划线定界符 | 斜杠定界符 | 点定界符 |
---|---|---|---|
%yyyy%mm%d天 | %yyyy-%mm-%d天 | %yyyy/%mm/%d天 | %yyyy. %mm.%dd |
%yy%mm%dd | %yy-%mm-%dd | %yy/%mm/%d天 | %yy.%mm.%dd |
%mm%dd%yyyy | %mm-%dd-%yyyy | %mm/%d天/%yyyy | %mm.%dd. %yyyy |
%mm%dd%yy | %mm-%dd-%yy | %mm/%dd/%yy | %mm%dd. %yy |
%yyyy%dd%mm | %yyyy-%dd-%mm | %yyyy/%d天/%mm | %yyyy.%dd. %mm |
%yy%dd%mm | %yy-%dd-%mm | %yy/%d天/%mm | %yy.%dd. %mm |
%dd%mm%yyyy | %d天-%mm-%yyyy | %d天/%mm/%yyyy | %dd. %mm%yyyy |
%dd%mm%yy | %dd-%mm-%yy | %d天/%mm/%yy | %dd. %mm%yy |
转换
元素 | 表达式 | 描述 |
---|---|---|
将 [] 从格式 [] 转换为另一格式 [] | convertdate (x, y和 z) | 将第一个值从指定的源格式转换为指定的目标格式。 |
将 [] 转换为 Gregorian 日期 | julianDayToGregorian(x) | 将 Julian 格式的指定日期转换为 Gregorian 格式。 |
将 [] 转换为儒略格式 | gregorianToJulianDay(x) | 将 Gregorian 格式的指定日期转换为 Julian 格式。 |
使用格式 [] 将 [] 转换为日期 | datevalue (x,y) | 将第一个值转换为具有指定格式的日期。 |
使用格式 [] 将 [] 转换为时间 | timevalue (x,y) | 将第一个值转换为具有指定格式的时间。 |
使用格式 [] 将 [] 转换为时间戳记 | timestampvalue (x,y) | 使用指定的格式将第一个值转换为时间戳记。 |
格式
元素 | 表达式 | 描述 |
---|---|---|
当前日期 | 日期 () | 将计算机的系统日期作为日期值返回。 |
当前时间 | 时间 () | 将来自计算机的系统时间作为时间值返回。 |
当前时间戳记 | timestamp () | 以时间戳记值形式返回计算机中的系统时间。 |
日期年份 [] | 年 (x) | 返回表示指定日期的年份的数字。 |
日期的月份 [] | 月 (x) | 返回表示指定日期的月份的数字。 |
日期 [] | 天 (x) | 返回一个数字,该数字表示指定日期的月份日期。 |
日期 [] 的星期几 | 工作日 (x) | 返回一个数字,表示指定日期的星期几,其中 1 是星期日。 |
时间小时 [] | 小时 (x) | 返回表示指定时间值的小时数的数字。 |
分钟时间 [] | 分钟 (x) | 返回表示指定时间值的分钟数的数字。 |
秒时间 [] | 秒 (x) | 返回一个数字,表示指定时间值的秒数和毫秒数。 |
函数
元素 | 表达式 | 描述 |
---|---|---|
添加 [] 个月至今 [] | addmonthsdate (x, y) | 将指定的月数添加到指定的日期。 |
将 [] 个月添加到时间戳记 [] | addmonthstimestamp (x, y) | 将指定的月数添加到指定的时间戳记。 |
日期 [] 到 [] 之间的天数 | datediff (x, y) | 返回两个指定日期之间的天数。 |
使用格式 [] 的舍入日期 [] | round_date (x, y) | 使用指定的格式对日期值进行舍入。 |
使用格式 [] 的循环时间 [] | 综合时间 (x, y) | 使用指定的格式对时间值进行舍入。 |
使用格式 [] 的舍入时间戳记 | round_timestamp (x, y) | 使用指定的格式对时间戳记值进行舍入。 |
时间 [] 和 [] 之间的时间差 | Timediff (x, y) | 返回两个指定时间之间在小时数,分钟数和秒数之间的差值。 第一个值是两个时间中的最早时间。 第二个值是两个时间中的较晚时间。 返回的值是时间值。 |
使用格式 [] 截断日期 [] | trunc_date (x, y) | 使用指定的格式截断日期。 第一个值必须是变量(必须绑定到类型为日期的列),或者是返回日期的表达式或函数。 format 值必须是字符串格式的字符串字面值,或者绑定到字符串列的变量或字符串字面值。 |
使用格式 [] 截断时间 [] | trunc_time (x, y) | 使用指定的格式截断时间。 第一个值必须是变量(必须绑定到类型为时间的列),或者是返回时间的表达式或函数。 format 值必须是字符串格式的字符串字面值,或者绑定到字符串列的变量或字符串字面值。 |
使用格式 [] 截断时间戳记 [] | 截断时间戳记 (x, y) | 使用指定的格式截断时间戳记。 第一个值必须是变量 (必须与时间戳记类型的列绑定) 或返回时间戳记的表达式或函数。 format 值必须是字符串格式的字符串字面值,或者绑定到字符串列的变量或字符串字面值。 |
总则
您可以将常规元素与检查,操作以及数学,字符串和日期和时间元素组合在一起。
元素 | 表达式 | 描述 |
---|---|---|
由 [] 匹配的数据类 | 数据类 (x) | 查找数据中与指定数据类匹配的数据类。 此值通常是绑定到具有要分类的值的列的变量。 |
频率 [] | 出现次数 (x) | 查找指定值的频率。 |
从引用键 [] 和引用值 [] 中查找 [] | 查找 (x, y, z) | 将值替换为查找表中的相应值。 要运行此函数,查找表必须包含具有对应列的值的列表,该列包含与第一列相关的数据。 例如,如果您查找的原始值包含在含有键(例如产品代码)的列中,那么相关查找表包含的一列会列出所有可能的键值,另一列包含要用于替代这些键的对应值。 此函数通常用于内部代码用于表示在数据源中不同位置出现的值的系统。 注: 此函数的第一个参数是要查找的值。 第二个参数必须绑定到包含查找表中的键的引用列。 第三个参数必须绑定到包含查找表中的值的引用列。 两个引用列均必须在同一物理表中。 该函数的结果是查找表中与指定为第一个参数的键对应的值。 |
按 [] 分组的不为空的 [] 值的数目 | count_not_null (x, y) | 在列中查找空 (非单值) 值的数目。 第一个值必须包含绑定到要计数的列的变量。 第二个值指定可选分组列。 如果已指定,那么函数将返回第二列的值相同的所有行中第一列中的空值计数。 |
按 [] 分组的 [] 的相异值数 | 计数 (x, y) | 在列中查找相异值的数目。 第一个值必须包含绑定到要计数的列的变量。 第二个值指定可选分组列。 如果已指定,那么函数将返回第二列的值相同的所有行中第一列中的相异值计数。 |
将 [] 的缺失值替换为 [] | 合并 (x, y) | 在第一个值中查找空列,并将其替换为第二个值。 如果指定的第一个值不为空,那么不会替换该值。 |
数学
您可以将数学元素与检查逻辑组合在一起。
元素 | 表达式 | 描述 |
---|---|---|
[] 的绝对值 | Abs (x) | 返回您指定的数字值的绝对值。 例如,[-13] 的绝对值将返回 13。 |
[] 的平均值 (按 [] 分组) | 平均 (x, y) | 返回按指定值分组的指定数字列的平均值的聚集函数。 |
[] 的指数值 | exp (x) | 返回指定数字值的指数值。 |
[] 的最大值 (按 [] 分组) | max (x, y) | 返回在指定数字列中找到的最大值 (按指定值分组) 的聚集函数。 对于第一个值,可以指定列或变量(在使用规则时必须绑定到列),或者包含至少一个变量的表达式。 |
[] 的最小值 (按 [] 分组) | 最小值 (x, y) | 返回在指定数字列中找到的最小值 (按指定值分组) 的聚集函数。 |
规范化按 [] 分组的值 [] | 标准化 (x, y) | 将列中的值规范化为列平均值周围的值的标准差数。 规范化值计算为 (value-mean)/stddev。 如果为分组依据指定值,那么所使用的平均值/标准差不是整列的平均值/标准差,而是在分组依据列中具有相同值的所有值的平均值/标准差。 例如,如果列的平均值为 10 ,标准差为 2 ,那么规范化值 12 为 1.0 (=mean + 1stddev)。 6 的规范化值为 -2.0 (=曲 2stddev)。 |
舍入数 [] 保留 [] 小数 | 舍入 (x, y) | 返回指定数字的舍入值。 可选的 decimals 参数指定小数点右侧要舍入到的位数。 如果未指定,那么 decimals 的值为零。 |
数字的刻度 [] | 标度 (x*) | 返回小数点右边的位数。 例如,您希望确定 2.3456789 的阶。 阶为 7。 |
[] 的平方根 | sqrt (x) | 返回指定数字值的平方根。 |
[] 的标准差 (按 [] 分组) | stddev (x) | 一种聚集函数,用于计算您指定的数字列的标准差,并按指定的值分组。 |
按 [] 分组的 [] 总和 | 总和 (x, y) | 返回指定数字列中所有值的总和的聚集函数。 |
截断数字 [] 保留 [] 小数 | trunc (x, y) | 返回指定数字的截断值。 keeping 参数是要截断的值。 可选的 decimals 参数指定小数点右侧要截断到的位数。 如果未指定,那么 decimals 的值为零。 |
字符串
可以将字符串元素与检查逻辑组合在一起。
标识
元素 | 表达式 | 描述 |
---|---|---|
字符 [] 的 ASCII 代码 | Ascii (x) | 返回字符值的 ASCII 字符集值。 |
具有 ASCII 代码 [] 的字符 | char (x) | 返回指定 ASCII 字符的字符值。 |
并置 [] 乘以字符串 [] | str (x, y) | 生成将指定值与指定次数并置的字符串。 例如,如果指定 concatenate [5] times the string [AB] ,那么数据质量规则将返回 ABABABABABAB。 |
[] 的长度 | len (x) | 返回指定字符串中的字符总数 (即长度)。 |
将 [] 解析为数字 | val (x) | 将字符串作为输入,并尝试将其解析为数字。 例如,如果指定 12.34,那么结果是数字 12.34。 |
[] 在字符串 [] 中的位置 | 索引 (x, y) | 返回第一个出现在另一个字符串中的子串的索引。 返回该出现实例的基于零的索引(如果找到)或 -1(如果找不到该子字符串)。 |
修改
元素 | 表达式 | 描述 |
---|---|---|
使用格式 [] 将 [] 转换为字符串 | tostring (x, y) | 将指定的值转换为指定格式的字符串。 |
[] 的前 [] 个字符 | 左 (x, y) | 返回指定字符串的前 n 个字符,其中 n 是要返回的字符数。 |
[] 的最后 [] 个字符 | 右侧 (x, y) | 返回指定字符串的最后 n 个字符,其中 n 是要返回的字符数。 |
[] 的小写 | lcase (x) | 将指定字符串中的所有字符转换为小写。 |
从位置 [] 开始且长度为 [] 的 [] 的子串 | 子串 (x, y, z) | 返回从指定位置开始且具有指定长度的指定字符串的子串。 为开始位置指定的值是要检索的第一个字符(含)的索引。 1 是字符串中第一个字符的索引。 例如,您希望使用每个产品代码中的三位数(实际字符位置为 4 到 6)值来确定哪个部门负责该产品。 |
[] 的大写 | ucase (x) | 将指定字符串中的所有字符转换为大写。 |
填充
元素 | 表达式 | 描述 |
---|---|---|
在 [] 之后添加 [] 个空格 | rpad (x, y) | 在指定字符串后添加指定数目的空格。 |
在 [] 之前添加 [] 个空格,在 [] 之后添加 [] 个空格 | 小键盘 (x, y, z) | 在指定字符串前后添加指定数目的空格。 |
在 [] 之前插入 [] 个空格 | lpad (x, y) | 将指定数目的空格添加到指定字符串的开头。 |
修剪
元素 | 表达式 | 描述 |
---|---|---|
[] 的左修剪 | ltrim (x) | 除去指定字符串开头的所有空格。 |
右修剪 [] | rtrim (x) | 除去指定字符串末尾的所有空格。 |
修剪 [] | 修剪 (x) | 除去指定字符串开头和结尾的所有空格。 |
了解更多信息
父主题: 管理数据质量定义