カスタムデータメトリック関数¶
システムのデータ品質メトリクス関数(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 $$;
- 例: 複数のテーブル引数を使用した参照チェックの実行
ユーザー定義の 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)';
ここで、
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)));
出力は、
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;
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
)
);