カスタムデータメトリック関数

システムのデータ品質メトリクス関数(DMF) にデータ品質チェックを実行できるものがない場合は、 CREATE DATA METRIC FUNCTION コマンドを使用して独自の DMF を作成することができます。

カスタム DMF

次の例は、 CREATE DATA METRIC FUNCTION コマンドを使用して、カスタム DMF を作成する方法を示しています。

例: 単一のテーブル引数を持つユーザー定義 DMF

COUNT 関数を呼び出して、テーブルの3列で正の数を持つ行の総数を返す 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 をテーブルに追加すると、そのテーブルが最初の引数として使用されます。テーブルを受け付ける引数が追加されている場合は、2番目のテーブルの完全修飾名も指定する必要があります。この機能により、参照整合性、マッチングと比較、異なるデータセット間での条件チェックが簡単になります。

主キーと外部キーの関係で定義される参照整合性を検証したいとします。このケースの場合、 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 にマッピングされているかどうかをチェックしたいとします。もう一方のテーブル引数に salespeople テーブルを指定しながら、 salesorders テーブルに DMF を追加することができます。

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 のテスト

カスタム DMF を手動で実行すると、1 つまたは複数のテーブルに関連付ける前にテストできます。詳細については、 DMF を手動で呼び出します。 をご参照ください。

カスタムの DMF の安全化

DMF をセキュアにするには、 ALTER FUNCTION コマンドを使用します。関数がセキュアであることの意味については、 セキュア 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