より効率化を図るため、Streamオペレータでは、実際のDML文に基づいたマクロを作成する代わりに、事前定義マクロの使用もサポートしています。ユーザーが記述した事前定義マクロは、TPT Streamジョブが開始する前にデータベース上に置かれます。 マクロは、マクロが処理するDML文の型(INSERT、UPDATE、DELETE、またはUPSERT)を指定します。
事前定義マクロが使用されると、Streamオペレータはマクロを作成する代わりにこのマクロを直接使用します。 事前定義マクロの使用により、Streamオペレータは、マクロを内部で作成したり削除したりする処理を回避でき、ジョブの実行中にデータベースのデータ ディクショナリを変更することもなくなります。 すべての行が読み込まれた後、ユーザーはマクロを削除するか保持するかを決定する必要があります。 マクロの置かれるデータベースには、EXECUTE MACRO権限が必要です。
Streamオペレータは、EXECUTEコマンドを使用して事前定義マクロをサポートします。事前定義マクロの使用についての詳細は、オブジェクト定義とAPPLY文のEXECUTE文を参照してください。
マクロの作成の詳細については、<Teradata Vantage™ - SQLデータ定義言語 - 詳細トピック, B035-1184>を参照してください。
マクロの実行の詳細については、<Teradata Vantage™ - SQLデータ操作言語, B035-1146>を参照してください。
Streamオペレータでは、Streamオペレータ ジョブを実行するたびに新しいマクロを作成したり削除したりする必要がないため、事前定義マクロを使用すると時間が節約できます。
- Streamオペレータは、マクロのパラメータ リストが、スキーマによって指定されたリストと一致することを想定しています。
- このマクロでは、INSERT、UPDATE、DELETE、またはUPSERTのうちの1つのプライマリ インデックス操作を指定します。 次の例のように、サポートされているステートメントがマクロに複数含まれている場合、Streamオペレータによってエラーが通知されます。
定義済みマクロの使用例を以下に示します。
/*********************************************************************/ /* Description: Use the TPT Stream operator to load data into a */ /* table via a predefined macro. */ /*********************************************************************/ USING CHARACTER SET ASCII DEFINE JOB LOAD_TABLE_USING_STREAM_OPER DESCRIPTION 'LOAD TABLE USING STREAM OPERATOR' ( DEFINE SCHEMA EMPLOYEE_SCHEMA DESCRIPTION 'SAMPLE EMPLOYEE SCHEMA' ( COL1 VARCHAR(5), COL2 VARCHAR(5) ); DEFINE OPERATOR DDL_OPERATOR DESCRIPTION 'TERADATA PARALLEL TRANSPORTER DDL OPERATOR' TYPE DDL ATTRIBUTES ( VARCHAR TraceLevel = 'none', VARCHAR PrivateLogName = 'ddloper_log', VARCHAR TdpId = @MyTdpId, VARCHAR UserName = @MyUserName, VARCHAR UserPassword = @MyPassword, VARCHAR ErrorList = '3807' ); DEFINE OPERATOR STREAM_OPERATOR DESCRIPTION 'TERADATA PARALLEL TRANSPORTER STREAM OPERATOR' TYPE STREAM SCHEMA EMPLOYEE_SCHEMA ATTRIBUTES ( VARCHAR TraceLevel = 'none', VARCHAR PrivateLogName = 'streamoper_privatelog', VARCHAR TdpId = @MyTdpId, VARCHAR UserName = @MyUserName, VARCHAR UserPassword = @MyPassword, VARCHAR ErrorTable = 'STREAMOPER_ERRTABLE', VARCHAR LogTable = 'STREAMOPER_LOGTABLE', VARCHAR PackMaximum = 'Yes', INTEGER MaxSessions = 4, INTEGER MinSessions = 4 ); DEFINE OPERATOR FILE_READER DESCRIPTION 'TERADATA PARALLEL TRANSPORTER DATA CONNECTOR OPERATOR' TYPE DATACONNECTOR PRODUCER SCHEMA EMPLOYEE_SCHEMA ATTRIBUTES ( VARCHAR TraceLevel = 'none', VARCHAR PrivateLogName = 'dataconnoper_privatelog', VARCHAR FileName = 'VARDATAa', VARCHAR OpenMode = 'Read', VARCHAR Format = 'DELIMITED', VARCHAR Delimiters = '|' ); STEP step1_setup ( APPLY ('DROP TABLE STREAMOPER_ERRTABLE;'), ('DROP TABLE STREAMOPER_LOGTABLE;'), ('DROP TABLE STREAMTARGETTABLE'), ('CREATE TABLE STREAMTARGETTABLE, FALLBACK (COL1 VARCHAR(5), COL2 VARCHAR(5));'), ('REPLACE MACRO T1INSERT ( COL1 VARCHAR(5), COL2 VARCHAR(5) ) AS ( INSERT INTO STREAMTARGETTABLE VALUES (:COL1,:COL2); );') TO OPERATOR (DDL_OPERATOR); ); STEP step2_load_data ( APPLY ('EXEC T1INSERT INSERT;') TO OPERATOR (STREAM_OPERATOR [2]) SELECT * FROM OPERATOR (FILE_READER [1]); ); );