自定义数据指标函数¶
如果没有可以执行数据质量检查的 系统数据质量指标函数 (DMF),您可以使用 CREATE DATA METRIC FUNCTION 命令创建您自己的 DMF。
创建自定义 DMF¶
以下示例演示如何使用 CREATE DATA METRIC FUNCTION 命令来创建自定义 DMF。
- 示例:带单个表实参的用户定义 DMF
创建一个会调用 COUNT 函数的 DMF,以返回表的三列中具有正数的总行数:
CREATE OR REPLACE DATA METRIC FUNCTION governance.dmfs.count_positive_numbers( arg_t TABLE( arg_c1 NUMBER, arg_c2 NUMBER, arg_c3 NUMBER ) ) RETURNS NUMBER AS $$ SELECT COUNT(*) FROM arg_t WHERE arg_c1>0 AND arg_c2>0 AND arg_c3>0 $$;
- 示例:使用多个表实参执行参照检查
用户定义的 DMF 可以有多个接受表的实参。向表中添加 DMF 时,该表将用作第一个实参。如果存在接受表的其他实参,则还必须指定第二个表的完全限定名称。此功能可简化不同数据集之间的参照完整性、匹配和比较或条件检查。
假设您要验证由主键/外键关系定义的参照完整性。在这种情况下,您可以创建一个 DMF 来验证源表中的所有记录在引用表中是否具有相应的记录。以下是用户定义的 DMF,它会返回一个表中某列的值在另一个表的相应列中没有对应值的记录数:
CREATE OR REPLACE DATA METRIC FUNCTION governance.dmfs.referential_check( arg_t1 TABLE (arg_c1 INT), arg_t2 TABLE (arg_c2 INT)) RETURNS NUMBER AS 'SELECT COUNT(*) FROM arg_t1 WHERE arg_c1 NOT IN (SELECT arg_c2 FROM arg_t2)';
现在,假设要检查每个
salesorders
表中的订单(由其sp_id
标识)是否映射回salespeople
表中的sp_id
。您可以将 DMF 添加到salesorders
表,同时将salespeople
表指定为另一个表的实参。ALTER TABLE salesorders ADD DATA METRIC FUNCTION governance.dmfs.referential_check ON (sp_id, TABLE (my_db.sch1.salespeople(sp_id)));
输出将返回
salesorders
表中的行数,其中sp_id
列有未显示在salespeople
表的sp_id
列中的值。值大于 0 表示salesorders
中存在未映射到salespeople
中记录的sp_id
值。
保护自定义 DMF¶
您可以使用 ALTER FUNCTION 命令确保 DMF 安全。有关其对函数安全的意义的更多信息,请参阅 使用安全 UDFs 和存储过程保护敏感信息。
ALTER FUNCTION governance.dmfs.count_positive_numbers(
TABLE(
NUMBER,
NUMBER,
NUMBER
))
SET SECURE;
查看 DMF 的属性¶
描述 DMF 以查看其属性:
DESC FUNCTION governance.dmfs.count_positive_numbers(
TABLE(
NUMBER, NUMBER, NUMBER
)
);
+-----------+---------------------------------------------------------------------+
| property | value |
+-----------+---------------------------------------------------------------------+
| signature | (ARG_T TABLE(ARG_C1 NUMBER, ARG_C2 NUMBER, ARG_C3 NUMBER)) |
| returns | NUMBER(38,0) |
| language | SQL |
| body | SELECT COUNT(*) FROM arg_t WHERE arg_c1>0 AND arg_c2>0 AND arg_c3>0 |
+-----------+---------------------------------------------------------------------+
在自定义 DMF 上设置标签¶
使用 ALTER FUNCTION 命令在 DMF 上设置标签:
ALTER FUNCTION governance.dmfs.count_positive_numbers(
TABLE(NUMBER, NUMBER, NUMBER))
SET TAG governance.tags.quality = 'counts';
删除自定义 DMF¶
您可以使用 DROP FUNCTION 命令,从系统中移除自定义数据指标函数。
备注
您不能从系统中删除自定义 DMF,同时它仍与表或视图关联。使用 DATA_METRIC_FUNCTION_REFERENCES 函数来识别已设置数据指标函数的表和视图。
有关从表或视图中移除 DMF 关联的信息,请参阅 从对象中删除 DMF。
从系统中删除自定义 DMF:
DROP FUNCTION governance.dmfs.count_positive_numbers(
TABLE(
NUMBER, NUMBER, NUMBER
)
);