インデックスに対する条件としての非確定UDFの使用 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/qwr1571437338192.ditamap
dita:ditavalPath
ja-JP/qwr1571437338192.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

非確定UDFとは、入力が同じでも常に同じ結果を戻すとは限らないUDFのことです。CREATE FUNCTIONまたはREPLACE FUNCTION文にDETERMINISTIC句が指定されていない場合、またはNOT DETERMINISTIC句が指定されている場合、UDFは非確定と見なされます。非確定UDFは、各選択行ごとに評価されるので、インデックス列の条件に非確定UDFが含まれている場合、全AMP操作が実行されることになります。

例えば、以下のテーブル定義があるとします。

CREATE TABLE t1
   (c1 INTEGER
   ,c2 VARCHAR(9))
PRIMARY INDEX ( c1 );

以下の関数定義があるとします。

CREATE FUNCTION UDF_RAN(LowerBound INTEGER, UpperBound INTEGER)
RETURNS INTEGER
LANGUAGE JAVA
NO SQL
PARAMETER STYLE JAVA
NOT DETERMINISTIC
EXTERNAL NAME 'JarUDF:UDFExample.udf_random';

以下のSELECT文には、UDF_RANという非確定UDFを呼び出すc1インデックス列の条件が含まれています。そのUDFが呼び出されると、その結果として全AMP操作が実行されることになります。

SELECT *
FROM t1
WHERE c1 = UDF_RAN(1,12);