関数マッピングおよびUSING句 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/vjt1596846980081.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

関数マッピングの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;