オペレータ テンプレートを使用することで、ジョブ スクリプトを簡略化しサイズを小さくすることができます。 オペレータ テンプレートとは、次の例に示すように、Teradata PTで提供される標準オペレータを、APPLY文でテンプレート名を使用して参照したときに、自動的にジョブ スクリプトにインポートされる、格納DEFINE OPERATOR文です。
APPLY 'INSERT INTO TABLE_X ( :col1, ..., :coln );' TO OPERATOR( $LOAD() ) ... ;
この例では、$LOADはTeradata PTで提供される標準のLoadオペレータのテンプレート名です。 $LOADオペレータのDEFINE OPERATOR文は、Teradata PTテンプレート ディレクトリにあるテンプレート ファイル$LOAD.txtに格納されています。 テンプレート オペレータ名よりも短い説明的な名前が存在しない限り、テンプレート オペレータの名前は接頭辞がドル記号($)の標準のオペレータ型です。
次のテーブルは、Teradata PTで提供されるオペレータ テンプレートを示しています。 オペレータ テンプレートはすべてtemplateディレクトリのTeradata PT Installディレクトリに置かれており、ドル記号($)が先頭に付いています。
テンプレート オペレータ名 | 標準のオペレータ型 | テンプレート ファイル名 |
---|---|---|
$DATACONNECTOR_CONSUMER | DATACONNECTOR CONSUMER | $DATACONNECTOR_CONSUMER.txt |
$DATACONNECTOR_PRODUCER | DATACONNECTOR PRODUCER | $DATACONNECTOR_PRODUCEF |
$DDL | DDL | $DDL.txt |
$DELETER | UPDATE STANDALONE | $DELETER.txt |
$EXPORT | EXPORT | $EXPORT.txt |
$FE_OUTMOD | FASTEXPORT OUTMOD | $FE_OUTMOD.txt |
$FILE_READER | DATACONNECTOR PRODUCER | $FILE_READER.txt |
$FILE_WRITER | DATACONNECTOR CONSUMER | $FILE_WRITER.txt |
$FL_INMOD | FASTLOAD INMOD | $FL_INMOD.txt |
$INSERTER | INSERTER | $INSERTER.txt |
$LOAD | LOAD | $LOAD.txt |
$ML_INMOD | MULTILOAD INMOD | $ML_INMOD.txt |
$ODBC | ODBC | $ODBC.txt |
$OS_COMMAND | OS COMMAND | $OS_COMMAND.txt |
$SCHEMAP | SCHEMAMAPPER | $SCHEMAP.txt |
$SELECTOR | SELECTOR | $SELECTOR.txt |
$STREAM | STREAM | $STREAM.txt |
$UPDATE | UPDATE | $UPDATE.txt |
オペレータ テンプレートを使用するのは、独自のDEFINE OPERATOR文を個別のファイルに格納し、そのファイルをTeradata PT INCLUDE宣言でジョブ スクリプトにインポートすることに似ていますが、オペレータ テンプレートを使用するときはINCLUDE宣言の記述が不要である点が異なります。
テンプレートのDEFINE OPERATOR文は、記述時にスクリプト内に存在しません。このため、ユーザーにはそのオペレータ属性宣言に対する通常のアクセス権限がなく、これらの属性に対してジョブ スコープ デフォルト値を割り当てることができません。 これらの属性にアクセスできるようにするために、標準の各オペレータに定義されているすべてのオペレータ属性がテンプレート定義で宣言され、従来の方法で名前が付けられたジョブ変数にそれらのジョブ スコープ デフォルト値として割り当てられます。
次の例は、DDLオペレータのテンプレート定義です。
DEFINE OPERATOR $DDL DESCRIPTION 'Teradata Parallel Transporter DDL Operator' TYPE DDL ATTRIBUTES ( VARCHAR UserName = @DDLUserName, VARCHAR UserPassword = @DDLUserPassword, VARCHAR TdpId = @DDLTdpId, VARCHAR AccountId = @DDLAccountId, VARCHAR WorkingDatabase = @DDLWorkingDatabase, VARCHAR LogonMech = @DDLLogonMech, VARCHAR LogonMechData = @DDLLogonMechData, VARCHAR DataEncryption = @DDLDataEncryption, VARCHAR ARRAY ErrorList = @DDLErrorList, VARCHAR LogSQL = @DDLTargetLogSQL, VARCHAR PrivateLogName = @DDLPrivateLogName, VARCHAR QueryBandSessInfo = @DDLQueryBandSessInfo, VARCHAR ReplicationOverride = @DDLReplicationOverride, VARCHAR TraceLevel = @DDLTraceLevel );
すべてのDDLオペレータ属性には、$DDLテンプレートを参照するジョブ スクリプトを実行するためのジョブ変数を使用して、値を割り当てることができます。すべてのテンプレート属性名の先頭には、適切なオペレータ タイプ、またはテンプレートとの関連付けを推測しやすい短い名前やニーモニックの固有の文字列のいずれかが付加されています。 このテンプレート ジョブ変数の命名規則により、テンプレートに割り当てたジョブ変数によって、他の参照先のテンプレートの属性値が変更されるのを防ぐことができます。
以下のテーブルは、Teradata PTで利用できる各標準オペレータ テンプレートのジョブ変数接頭辞の一覧です。
テンプレート オペレータ名 | 標準のオペレータ型 | ジョブ変数名の接頭辞 |
---|---|---|
$DATACONNECTOR_CONSUMER | DATACONNECTOR CONSUMER | DCC |
$DATACONNECTOR_PRODUCER | DATACONNECTOR PRODUCER | DCP |
$DDL | DDL | DDL |
$DELETER | UPDATE STANDALONE | Deleter |
$EXPORT | EXPORT | Export |
$FE_OUTMOD | FASTEXPORT OUTMOD | FEOutmod |
$FILE_READER | DATACONNECTOR PRODUCER | FileReader |
$FILE_WRITER | DATACONNECTOR CONSUMER | FileWriter |
$FL_INMOD | FASTLOAD INMOD | FLInmod |
$INSERTER | INSERTER | Inserter |
$LOAD | LOAD | Load |
$ML_INMOD | MULTILOAD INMOD | MLInmod |
$ODBC | ODBC | ODBC |
$OS_COMMAND | OS COMMAND | OSCommand |
$SCHEMAP | SCHEMAMAPPER | Smap |
$SELECTOR | SELECTOR | Selector |
$STREAM | STREAM | Stream |
$UPDATE | UPDATE | Update |
テンプレート属性のジョブ変数に値を指定しなければ、Teradata PTはその属性がジョブ スコープのデフォルト値の指定なしで宣言されたものと解釈します。例えば、$DDLテンプレートを使用するスクリプトを実行したときに、$DDLジョブ変数DDLLogonMechに値を割り当てなかった場合、その属性の宣言について、
VARCHAR LogonMech = @DDLLogonMech,
Teradata PTは、$DDLテンプレートで以下のように宣言された場合と同様に解釈します。
VARCHAR LogonMech,
当然ながら、スクリプト定義のオペレータの属性と同じように、テンプレート オペレータの属性には、テンプレートが参照されるAPPLY文で常に値を割り当てることができます。 この割り当てにより、対応するジョブ変数に値が割り当てられているかどうかにかかわらず、次に示すように、特定のテンプレート オペレータの呼び出しに使用される属性値が最終的に決定されます。
SELECT * FROM OPERATOR ( $EXPORT() ATTR ( PrivateLogName = 'weekly_sample.log', SelectStmt = 'Select * from Weekly_Trans;' ) )
上記のスクリプトの抽出では、$EXPORTテンプレート定義で対応するジョブ変数の値が異なる場合でも、属性PrivateLogNameやSelectStmtに割り当てられている値は、Exportオペレータの実行で使用されます。 属性値の指定は、テンプレート オペレータでもスクリプト定義のオペレータと同じように機能します。
指定されたテンプレートへの参照がジョブ スクリプトに複数含まれ、1セットのジョブ変数割り当てではすべてのテンプレート参照に対応できない場合には、APPLY文による特定のテンプレート参照に対するテンプレート属性値の割り当てが必要になります。