再利用と管理しやすさを考えたジョブ スクリプトの記述 - Parallel Transporter

Teradata® Parallel Transporter ユーザー ガイド

Product
Parallel Transporter
Release Number
16.20
Published
2019年9月
Language
日本語
Last Update
2020-01-29
dita:mapPath
ja-JP/uah1527114222342.ditamap
dita:ditavalPath
ja-JP/uah1527114222342.ditaval
dita:id
B035-2445
Product Category
Teradata Tools and Utilities

Teradata PTでは、データの抽出とロードに1つのスクリプト言語で対応しています。またTeradataでは以下のリソースも用意しています。

  • 「Simplicity」と呼ばれる、メンテナンスが簡単で、再利用可能な定義済みのオペレータ テンプレートを使用するスクリプト言語の簡易バージョンです。 定義済みのオペレータ テンプレートを利用すれば、記述が必要なコード行数を大幅に削減できます。 ジョブ スキーマは、ソース テーブルやターゲット テーブルに応じて動的に生成されます。 Teradata PTスクリプトの簡易バージョンについては、オペレータ テンプレートおよび生成されたスキーマによるスクリプトの簡略化を参照してください。
  • Easy Loaderは、Teradata PTのロード ジョブをコマンド ラインから実行できるユーティリティです。 そのため、ジョブ スクリプトの記述は不要です。 Easy Loaderの詳細については、Teradata PT Easy Loaderを参照してください。

Simplicityジョブ スクリプトの使用

次に示すコード抜粋のように、Simplicityには、APPLY/SELECT文でオペレータを参照するとジョブ スクリプトにインポートされるオペレータ テンプレートがあります。

APPLY 'INSERT INTO TABLE_X (:col1, :col2);'
TO OPERATOR ($LOAD)
SELECT * FROM OPERATOR ($FILE_READER);

Teradata PTは$LOADと$FILE_READERのオペレータ テンプレート名を参照して、ジョブ スクリプトにインポートするロード テンプレートを識別します。 ロードやエクスポートのためのコード数の削減と、ジョブ メンテナンスの合理化は、お客様にとっても重要であり、シンプルなジョブ スクリプト メソッドを使用できます。

次の2例は、区切りファイルをTeradataテーブルにロードするための記述です。

例1:簡略化された構文を含むジョブ スクリプト

DEFINE JOB PLOAD_JOB
DESCRIPTION 'PLOAD JOB'
(
  /* Use the schema of the TargetTable for TPT_SCHEMA */
DEFINE SCHEMA TPT_SCHEMA FROM TABLE DELIMITED @LoadTargetTable;

  APPLY $INSERT @LoadTargetTable TO OPERATOR ($LOAD [@LoadInstances])
  SELECT * FROM OPERATOR ($FILE_READER(TPT_SCHEMA) [@ReaderInstances]);
);

例2:簡略化された構文を含まないジョブ スクリプト

DEFINE JOB PLOAD_JOB
DESCRIPTION 'PLOAD JOB'
(
  DEFINE SCHEMA TPT_SCHEMA
  DESCRIPTION 'TPT SCHEMA'
  (
    COL001    VARCHAR(100),
    COL002    VARCHAR(100),
    COL003    VARCHAR(100)
  );

  DEFINE OPERATOR LOAD_OPERATOR
  DESCRIPTION 'TPT Load Operator'
  TYPE LOAD
  SCHEMA *
  ATTRIBUTES
  (
    VARCHAR TdpId              = @LoadTdpId,
    VARCHAR UserName           = @LoadUserName,
    VARCHAR UserPassword       = @LoadUserPassword,
    VARCHAR TargetTable        = @LoadTargetTable,
    VARCHAR LogTable           = @LoadLogTable,
    VARCHAR ErrorTable1        = @LoadErrorTable1,
    VARCHAR ErrorTable2        = @LoadErrorTable2,
    VARCHAR PrivateLogName     = @LoadPrivateLogName
  );

  DEFINE OPERATOR FILE_READER_OPERATOR
  DESCRIPTION 'TPT DataConnector Producer Operator'
  TYPE DATACONNECTOR PRODUCER
  SCHEMA TPT_SCHEMA
  ATTRIBUTES
  (
    VARCHAR FileName           = @FileReaderFileName,
    VARCHAR Format             = @FileReaderFormat,
    VARCHAR OpenMode           = @FileReaderOpenMode,
    VARCHAR TextDelimiter      = @FileReaderTextDelimiter,
    VARCHAR MultipleReaders    = @FileReaderMultipleReaders,
    VARCHAR PrivateLogName     = @FileReaderPrivateLogName
  );

  APPLY
  (
    'INS ' || @LoadTargetTable || ' (
     :COL001,
     :COL002,
     :COL003
   );'
 TO OPERATOR (LOAD_OPERATOR [@LoadInstances])
 SELECT *
 FROM OPERATOR ( FILE_READER_OPERATOR [@ReaderInstances]);
);

前述の例1(簡略化された構文を含むジョブ スクリプト)にあるように、テンプレートを利用すればジョブ スクリプト自体にオペレータのDEFINE OPERATOR文を記述しなくてすみます。 DEFINE SCHEMA文のジョブ変数@LoadTargetTableに対する参照により、Teradata PTはそのジョブ変数に指定された値に従ってランタイムにジョブ スキーマを生成できます。

ジョブ変数ファイルを使用する場合の値

ジョブ変数ファイルに定義したジョブ変数を利用すれば、すべてのスクリプトに定数として値をコーディングしなくても、スクリプト実行時にジョブ スクリプト コンパイラからジョブ変数を割り当てることができます。 スクリプトのジョブ変数には接頭辞として@記号を付けますが、これはTeradata PTジョブの実行時にスクリプト コンパイラがそれらの変数をそれぞれ対応する値に置き換えるためです。

Teradata PTでは、1つのスクリプトに代入できる変数の数に制限がないため、システム間でスクリプトを最大限に再利用できます。 それだけでなく、ジョブ変数ファイルによって、複数のジョブで変数値の共通セットを共有することもできます。

ジョブ変数ファイルの詳細については、ジョブ変数ファイルのセット アップを参照してください。

Simplicityスクリプトのメリット

  • コンパクトでシンプルなジョブ スクリプト
  • オペレータ テンプレートの利用により削減できるジョブ スクリプトのメンテナンスの手間
  • ユーザー定義のテンプレートでカスタマイズ可能なスクリプト
  • 生成されるスキーマ オブジェクト
  • 生成されるSQL INSERT文
  • オペレータ属性に合わせたジョブ変数名の標準化