自定义数据指标函数

如果没有可以执行数据质量检查的 系统数据质量指标函数 (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
$$;
Copy
示例:使用多个表实参执行参照检查

用户定义的 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)';
Copy

现在,假设要检查每个 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)));
Copy

输出将返回 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;
Copy

查看 DMF 的属性

描述 DMF 以查看其属性:

DESC FUNCTION governance.dmfs.count_positive_numbers(
  TABLE(
    NUMBER, NUMBER, NUMBER
  )
);
Copy
+-----------+---------------------------------------------------------------------+
| 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';
Copy

删除自定义 DMF

您可以使用 DROP FUNCTION 命令,从系统中移除自定义数据指标函数。

备注

您不能从系统中删除自定义 DMF,同时它仍与表或视图关联。使用 DATA_METRIC_FUNCTION_REFERENCES 函数来识别已设置数据指标函数的表和视图。

有关从表或视图中移除 DMF 关联的信息,请参阅 从对象中删除 DMF

从系统中删除自定义 DMF:

DROP FUNCTION governance.dmfs.count_positive_numbers(
  TABLE(
    NUMBER, NUMBER, NUMBER
  )
);
Copy
语言: 中文