関数マッピングのUSING句でパラメータに指定した値は、関数マッピング定義のデフォルト値よりも優先されます。
マッピング定義内の値で定義されているが、USINGカスタム句で指定されていない引数は、関数マッピングの実行時にシステムによって追加されます。マッピング定義でデフォルト値を指定した場合、これらのデフォルト値を関数マッピングの実行で指定する必要はありません。
このシナリオでは、関数マッピング定義はデフォルトのclicklag値20を指定します。
CREATE FUNCTION MAPPING appl_view_db.sessionize FOR sessionize SERVER coprocessor USING Timecolumn, timeout(100), clicklag(20), emitnull;
以下のSELECT文は、clicklag値を200として指定するため、関数マッピングの実行では、関数マッピング定義で指定されたclicklag値20の代わりに200のclicklag値を使用します。
SELECT * FROM test_db.sessionize ( ON test_user.t1 AS InputTable PARTITION BY 1 USING Timecolumn('Test') clicklag(200) ) AS dt;
以下のSELECT文はemitnullパラメータを指定せず、マッピング定義にemitnullのデフォルト値が含まれていないため、emitnullパラメータは実行中にリモート システムに渡されません。
SELECT * FROM test_db.sessionize ( ON test_user.t1 AS InputTable PARTITION BY 1 USING Timeout(10) Timecolumn('Test') clicklag(200) ) AS dt;
以下のSELECT文にはclicklagとtimeoutパラメータが含まれていませんが、関数マッピング定義で、clicklagとtimeoutパラメータをデフォルト値で指定しています。
SELECT * FROM test_db.sessionize ( ON test_user.t1 AS InputTable PARTITION BY 1 USING Timecolumn('Test') ) AS dt;
SELECT文の関数マッピングでは、リモート システムが関数を実行するために必要なすべてのパラメータを指定する必要があります。そうしないと、エラーが発生します。
例えば、Sessionize関数を実行するには、Timecolumnパラメータが必須です。以下の関数マッピング定義にはTimecolumnのデフォルト値が含まれていないため、SELECT文の関数マッピングでTimecolumn値を指定する必要があります。
CREATE FUNCTION MAPPING appl_view_db.sessionize FOR sessionize SERVER coprocessor USING Timecolumn, Timeout, clicklag(20), emitnull;
次のSELECT文は、関数マッピングのTimecolumn値を指定します。
SELECT * FROM test_db.sessionize ( ON test_user.t1 AS InputTable PARTITION BY 1 USING Timeout(10) Timecolumn('Test') clicklag(20) ) AS dt;