より効率化を図るため、Streamオペレータでは、実際のDML文に基づいたマクロを作成する代わりに、事前定義マクロの使用もサポートしています。ユーザーが記述した事前定義マクロは、TPT Streamジョブが開始する前にデータベース上に置かれます。 マクロは、マクロが処理するDML文の型(INSERT、UPDATE、DELETE、またはUPSERT)を指定します。
事前定義マクロが使用されると、Streamオペレータはマクロを作成する代わりにこのマクロを直接使用します。 事前定義マクロの使用により、Streamオペレータは、マクロを内部で作成したり削除したりする処理を回避でき、ジョブの実行中にTeradata Databaseのデータ ディクショナリを変更することもなくなります。 すべての行が読み込まれた後、ユーザーはマクロを削除するか保持するかを決定する必要があります。 マクロの置かれるデータベースには、EXECUTE MACRO権限が必要です。
Streamオペレータは、EXECUTEコマンドを使用して事前定義マクロをサポートします。事前定義マクロの使用についての詳細は、オブジェクト定義とAPPLY文のEXECUTE文を参照してください。
マクロの作成についての詳細は、<SQLデータ定義言語、B035-1184>を参照してください。
マクロの実行についての詳細は、<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]);
);
);