データを取り込もう！

こんにちは！

今日はVantageのテーブルにデータをロードする際に使用するネイティブローダ、Teradata Parallel Transporterの利用についてお話ししようと思います。
記事ではWindowsをベースにお話を進めますので他のOSを利用されている方は適宜読み替えてみてください。
また、記事内にみなさんの環境の情報を穴埋めして利用できるサンプルソースもおいておきますね！

# Teradata Parallel Transporter（TPT）の入手とインストール
TPTは別記事 [ダウンロードサイトを知ろう！]()でもお知らせしたテラデータの[ダウンロードサイト](https://download.teradata.com/)からダウンロードすることが可能です。
「Tools and Utilities」というパッケージがありますのでそれをダウンロードしインストールしてください。このTools and Utilitiesにはその名の通りたくさんのツールが含まれていますのでインストールの際の選択画面で「Teradata Parallel Transporter BASE」と、この記事のようにAmazon S3から直接データを読み込む場合には「Teradata Access Module for Amazon S3」にチェックを入れてインストールしてください。

![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/9db4d374-2d3d-5769-5cb6-3925ec952396.png)

# インストール後の設定
Vantageのクライアントツール（特にキャラクターユーザーインターフェースのもの）ではTDPIDというものが使われます。このTPDID、何かというと一言でいえば「複数ノードで構成されたVantageのアドレス解決名」です。
Vantageの構成の中にはクライアントへのゲートウェイとなるマスターノードは存在しません。構成するコンピュートノード全てはクライアントへのゲートウェイとなります。クライアントはどのノードにログインを試みてもそれが受け付けられるわけですが、可用性をより向上させるために登録された全てのノードへ自動的に接続を試みる機能がクライアント・ツールに組み込まれています。それがこのTDPIDです。
これから行うことはDNSを運用されている場合は1つのドメイン名に複数のAレコードを登録するのと同じだと思ってください。ですのでDNSにドメインを登録する場合はこの設定は必要なくTPDIDにドメイン名を使用していただければ結構です。

その設定方法ですがWindowsの持つhostsファイル（場所は画像の通りです）に以下のような行を追加してください。

192.168.1.11 dbccop1
192.168.1.12 dbccop2
192.168.1.13 dbccop3

このようにVantageを構成するノードの数だけ各ノードのIPアドレスとdbccop1、2、3と「cop」の後ろの数字を1つずつ増やしながら追加します。こうすることでVantageのクライアント・ツールはここに記載されたノードの中で通信可能となったノードと通信を開始するのです。

![画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/999097a9-18c2-7c2e-9aad-ecb02523678d.png)

# TPTスクリプト
さて、ここからが本題です。TPTを使用してデータをロードする場合にはそれ用のスクリプトを記述しTPTモジュールの入力とします。
単純なTPTスクリプトは4つのパートに分かれています。
これからの説明に出てくる図で特に開設されていないところは決まり文句だと思ってください。

##### ファイル・スキーマのブロック
読み込むデータソース・ファイルがどのような項目で構成されているのかを記述します。

![画像3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/dc3f2d30-ec82-aac5-fe2a-eba6f99089ea.png)

##### リーダー・オペレータのブロック
データソース・ファイルを読み込みリーダー・オペレーターがどのようなファイルをどこから読み込むのかを記述します。

![画像4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/b260debf-e079-e280-060a-ff8b6e4a6524.png)

##### ローダー・オペレーターのブロック
データ・ロードを行うローダー・オペレータがどこにデータをロードするのか、またログやエラー情報を情報を出力するのかを記述します。

![画像5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/b62e478e-e284-c553-279f-e6d5620fcc98.png)

##### ロードに使用するSQL
ロードの際に使用するSQL分を記述します。実際のテーブルと読み込んだCSVとの項目の位置合わせなどを行うことが可能です。

![画像6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/a5844895-0bec-499d-7982-3aeb62fd61b2.png)

# TPTスクリプト
このような情報を記述したTPTスクリプト全貌は以下のような形になります。

```:TPT_LOAD.tpt
USING CHARACTER SET UTF-8
DEFINE JOB tptload_1
(
	DEFINE SCHEMA source_file
	(
		COL_1 VARCHAR(20)
		COL_2 VARCHAR(20),
		COL_3 VARCHAR(20),
		COL_4 VARCHAR(20),
		COL_5 VARCHAR(20),
	);

	DEFINE OPERATOR reader()
	TYPE DATACONNECTOR PRODUCER
	SCHEMA source_file
	ATTRIBUTES
	(
		VARCHAR Format = 'Delimited',
		VARCHAR TextDelimiter=',',
		VARCHAR AccessModuleName = 'libs3axsmod.so',
		INTEGER SKIPROWS=1,
		VARCHAR OpenQuoteMark='"',
		VARCHAR QuotedData='Optional',
		VARCHAR AccessModuleInitStr = 'S3Bucket=[S3バケット名]
			S3Region=[リージョン名]
			S3Prefix=["S3バケットのフォルダ階層"]
			S3Role=[S3アクセス用IAMロール]
			S3SinglePartFile=True
			S3Object=[S3オブジェクト名]'
	);

	DEFINE OPERATOR loader()
	TYPE UPDATE
	SCHEMA *
	ATTRIBUTES
	(
		VARCHAR TdpID = '[VantageID]',
		VARCHAR UserName = '[ユーザー名]',
		VARCHAR UserPassword = '[パスワード]',
		VARCHAR UnicodePassThrough  = 'On',
		VARCHAR LogTable = '[データベース名].LG_[テーブル名]',
		VARCHAR TargetTable = '[データベース名].[テーブル名]',
		VARCHAR ErrorTable1 = '[データベース名].UV_[テーブル名]',
		VARCHAR ErrorTable2 = '[データベース名].ET_[テーブル名]',
		VARCHAR DropLogTable = 'Y',
		VARCHAR DropErrorTable = 'Y',
		INTEGER MaxSessions =  10
	);

	STEP load_file
	(
	APPLY
	('INSERT INTO [データベース名].[テーブル名] (
		COL_1,
		COL_2,
		COL_3,
		COL_4,
		COL_5
	)
	values(
		:COL_1,
		:COL_2,
		:COL_3,
		:COL_4,
		:COL_5
      );')
      TO OPERATOR (loader() [1])
      SELECT * FROM OPERATOR (reader() [1]);
   );
);

```

このスクリプトを書き上げたら、あとはWindowsのコマンド・プロンプトから以下のようにTPTを実行します。

```:exec_TPT.sh
tbuild -f [TPTスクリプト・ファイル名]
```

これだけでVantageのネイティブ・ローダを使用した高速データロードを行っていただくことが可能です。
ぜひお試しください！

# より詳しく知りたい方へ
・[Teradata® Parallel Transporter クイック スタート ガイド](https://docs.teradata.com/r/eDICTMpyJ1eceC0ZsXizGw/root)
・[Teradata® Parallel Transporter ユーザー ガイド](https://docs.teradata.com/r/yb1a~hZ~OT4cDTh1jtcn0w/root)
・[Teradata® Parallel Transporterリファレンス](https://docs.teradata.com/r/Teradata-Parallel-Transporter%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9-17.20)

#### Teradata Vantageへのお問合せ
[Teradata Vantage へのお問合せ](https://www.teradata.jp/About-Us/Contact)