AWS S3のデータをVantageにロードする

とても多くのお客様がVantageとAWSのサービスとの統合に関心を持っています。そのようなトピックからここではAmazon S3のデータをと効率よくVantageにロードする方法ついて説明します。

このガイドで説明するアプローチは、S3のデータをVantageで利用するための多くの可能性のあるアプローチの一つであり、そのままの形で提供されるものです。 このアプローチは社内で実装されテストされていますが、TeradataまたはAWSのいずれからも、このアプローチに関する正式なサポートはありませんのでご注意ください。

とはいえ、何がうまくいったのか、何がうまくいかなかったのか、どうしたら改善できるのか、などなど、皆さんのフィードバックはとても望ましく、ありがたく思います。

ご意見・ご感想は、コメントとしてお寄せください。

免責事項：本ガイドは、AWSとTeradata製品の両方のドキュメントからの内容を含んでいます。

# 概要

**[Teradata Access Module for Amazon S3](https://docs.teradata.com/reader/p~0sSD4zl4K8YPbEGnM3Rg/d~1yZcRSrPphEh64NatBSA)** は、Teradata Parallel Transporterのロード/アンロード・オペレーターとAmazon S3(Simple Storage Service)の間のインターフェースとして機能する共有ライブラリです。Teradata Access Module for Amazon S3は、Amazon S3からデータをエクスポートしてTeradata Vantageにロードするシナリオにおいて、チェックポイントおよびリスタート/リカバリ処理をサポートします。

Teradata Access Module for Amazon S3は、以下のオペレーションシステムで動作します。

|Operating System|Teradata Access Module for Amazon S3|
|:---------------|:--------------------------------|
|Linux|libs3axsmod.so|
|Windows|libs3axsmod.dll|


この入門ガイドでは、Teradata VantageとAmazon S3間の接続とデータ移動の方法について説明します。Teradata Access Module for Amazon S3 on Windows (libs3axsmod.dll) を使用して、以下を実行する予定です：

・Teradata VantageからAmazon S3へのデータエクスポート
・Amazon S3からTeradata Vantageへのデータインポート

**前提条件：**
・エクスポートしたデータを保存するための **[S3バケット](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html)** 
・**[Teradata Tools and Utilitiesのダウンロード - Windows](https://downloads.teradata.com/download/tools/teradata-tools-and-utilities-windows-installation-package)**
  o Teradata Parallel Transporter (Base and Stream)のインストール
  o Amazon S3 用 Teradata Access Module のインストール

# はじめに
データのコピーを開始する前に、以下の設定を行う必要があります。

### 「HOME "環境変数」
設定ファイルには、"HOME "環境が必要です。Windowsプラットフォームでは、「コントロールパネル」→「システム」→「システムの詳細設定」→「環境変数」で、「HOME」環境変数を手動で作成する必要があります。新しいユーザー変数 "HOME "を追加し、設定ファイルを保存する場所（例：C: \Program FilesTeradata╱Config）のパスを指定します。

環境変数HOMEの指す先にawsフォルダを作成します（例：C:⽋Program Files⽋Teradata⽋Configaws）。

Linuxの場合、各ユーザーはあらかじめHOMEディレクトリを持っています。HOME "ディレクトリの下に".aws "ディレクトリ（例：~/.aws）を作成します。 

### コンフィギュレーションファイル

設定ファイルには、configとcredentialsの2つがあります。

**設定ファイル**
config "ファイルには、Amazon S3バケットが配置されているリージョン名が含まれています。特定のバケットの "リージョン" は、バケット名と一緒にS3コンソールに表示されます。

![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/1bdc754b-a19a-afe8-4201-8d84d84efdbf.png)

Windowsの場合は<HOME>/awsディレクトリ（例：C: \Program FilesTeradata paragraphConfigaws）、Linuxの場合は ~/.aws/config ディレクトリの下にconfigファイルを作成します。

以下にconfigファイルの内容例を示す。

```:config
[default]
region = us-west-2
[export_job_7]
region = us-east
[load_job_5]
region = us-west-2
```

デフォルト領域が存在することが予想されます。

**認証ファイル**

資格情報ファイルには、**[「Access Key Id」や「Secret Access Key」](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html)** などのユーザー資格情報が含まれています。以下は、デフォルトの保存場所を<HOME>/aws/credentials（Linuxの場合は~/.aws/credentials）とした場合の、クレデンシャルファイルの内容の例である。

```:authorize
[default]
aws_access_key_id = AKIA************T6XA
aws_secret_access_key = Mpm1********************************CNT4
[export_job_7]
aws_access_key_id = AKIA************WLCX
aws_secret_access_key = Mpm1********************************QQL7
[load_job_5]
aws_access_key_id = AKIA************WWNB
aws_secret_access_key = Mpm1********************************CNT4
```

注：設定ファイルと認証情報ファイルは、任意のディレクトリに保存することもできます。ただし、ホームディレクトリの下にない場合は、S3ConfigDirという初期化文字列パラメータで、configファイルとcredentialsファイルが格納されているディレクトリパスを指定する必要があります。

# TeradataからAWS S3へのデータエクスポート

![画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/4793f586-5fa3-a4bd-781d-eb19935e3e67.png)

TeradataからS3へデータをエクスポートするためには、以下のスクリプトが必要です。
・ジョブ変数ファイル(オプション)
・ジョブの設定(オプション)
・エクスポートジョブ

すべてのジョブファイルを作成し、同じディレクトリ（例：C: \Program FilesTeradata ↵TPT Scripts）に配置します。

### ジョブバリアブル・ファイル

ジョブバリアブルファイルジョブバリアブルの値を定義するファイルです。このファイルは任意です。作成しない場合は、「DEFINE JOB」文の前に「SET」命令を用いて、ジョブスクリプトで変数を指定します。ジョブ・スクリプトの効率と安全性を高めるために、別のジョブ変数ファイルを作成することをお勧めします。

以下は、ジョブ変数ファイルのサンプルです。必要に応じて、ジョブ変数名と値を追加することができます。

```:tpt_attributes
/********************************************************/
/* TPT attributes - Common for all Samples */
/********************************************************/
TargetTdpId = '<Teradata Database ID>'
,TargetUserName = '<TargetUserName>'
,TargetUserPassword = '<TargetUserPassword>'
,TargetErrorList = [ '3706','3803','3807' ]
,DDLPrivateLogName = 'DDL_OPERATOR_LOG'
/********************************************************/
/* TPT EXPORT Operator attributes */
/********************************************************/
,ExportPrivateLogName = 'EXPORT_OPERATOR_LOG'
,SourceTdpId = '<Teradata Database ID>'
,SourceUserName = '<SourceUserName>'
,SourceUserPassword = '<SourceUserPassword>'
/********************************************************/
/* TPT DataConnector Consumer Operator */
/********************************************************/
,FileWriterFormat = 'Formatted'
,FileWriterPrivateLogName = 'FILE_WRITER_LOG'
,FileWriterFileName = 'S3W001DT'
,FileWriterDirectoryPath = '.'
,FileWriterOpenMode = 'Write'
/********************************************************/
/* APPLY STATEMENT parameters */
/********************************************************/
,ExportInstances = 1
,FileWriterInstances = 1
```

<>"ブラケットを適切な値に置き換えて、ブラケットを削除してください。ジョブスクリプトのディレクトリにファイルを保存します（例：C:୧Program FilesTeradata╱TPT Scripts╱jobVarExport）。

### セットアップファイル(オプション)

このファイルは、AWS S3 にエクスポートするソーステーブルを設定し、入力するために使用されます。すでにテーブルがある場合は、このファイルは必要ありません。設定用ジョブファイルのサンプルは  **[こちら](https://docs.teradata.com/reader/p~0sSD4zl4K8YPbEGnM3Rg/vwhRVr1Rdp9JO4~yHJkGjw)** です。

### エクスポート・ジョブ

設定ファイルや認証ファイルを作成し、<HOME>/awsディレクトリ（Linuxの場合は~/.aws）に配置したと仮定して、以下はエクスポートジョブのスクリプト例です。

```:data_export.tpt
DEFINE JOB EXPORT_FROM_TERADATA
DESCRIPTION 'Export data from Teradata to Amazon S3'
(
    STEP EXPORT_THE_DATA
    (
        APPLY TO OPERATOR ( $FILE_WRITER()
            ATTR
            (
                AccessModuleName = 'libs3axsmod.dll',
                AccessModuleInitStr = 'S3Bucket=<S3BucketName> S3Prefix="<PrefixName>/" S3Object=<output file name> S3SinglePartFile=True'
            )
        )
        SELECT * FROM OPERATOR ( $EXPORT
            ATTR
            (
                SelectStmt = 'SELECT * FROM <source table name>;'
            )
        );
    );
);
```

内のパラメータを適切に置き換え、"<>"括弧を削除する必要があります。ジョブスクリプトのディレクトリ（C:﹑Program FilesTeradata﹑TPT Scripts﹑export）にファイルを保存してください。

注）Linuxの場合、AccessModuleNameはlibs3axsmod.soを使用します。

### ジョブの実行

ジョブスクリプトを実行するには、Windowsのコマンドプロンプト（CMD）を開き、ディレクトリをscriptsの場所に変更して、実行します：

▶	tbuild -f <job script> -v <job variable file> -j <job name>
i.e. > tbuild -f export -v jobVarExport -j td2s3

出力ファイルは、エクスポートジョブで定義したAWS S3バケット - <S3BucketName>/<PrefixName>/<出力ファイル名>に配置されます。

# AWS S3からTeradataにデータをインポート

![画像3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/f8083d15-24a0-838f-2dc7-ee9928ac8fa4.png)

これらのスクリプトは、TeradataからS3へデータをインポートするために必要です。
・ジョブ変数ファイル(オプション)
・セットアップジョブ（オプション）
・インポートジョブ

スクリプトファイルを作成し、同じディレクトリに配置します（例：C: \Program FilesTeradata ╱TTPT Scripts）。

### ジョブバリアブルファイル

このファイルでは、ジョブ変数の値を定義します。このファイルは任意です。作成しない場合は、「DEFINE JOB」文の前に「SET」命令を用いて、ジョブスクリプトで変数を指定します。ジョブスクリプトの効率と安全性を高めるために、別のジョブ変数ファイルを作成することをお勧めします。

以下は、ジョブ変数ファイルのサンプルです。必要に応じて、ジョブ変数名と値を追加することができます。

```:tpt_attribute
/********************************************************/
/* TPT attributes - Common for all Samples              */
/********************************************************/
TargetTdpId = '<Teradata Database ID>'
,TargetUserName = '<TargetUserName>'
,TargetUserPassword = '<TargetUserPassword>'
,TargetErrorList = [ '3706','3803','3807' ]
,DDLPrivateLogName = 'DDL_OPERATOR_LOG'
/********************************************************/
/* TPT LOAD Operator attributes                         */
/********************************************************/
,LoadPrivateLogName = 'LOAD_OPERATOR_LOG'
,LoadTargetTable = '<target table name>'
,LoadLogTable = '<target table name>_log'
,LoadErrorTable1 = '<target table name>_e1'
,LoadErrorTable2 = '<target table name>_e2'
/********************************************************/
/* TPT DataConnector Producer Operator                  */
/********************************************************/
,FileReaderFormat = 'Formatted'
,FileReaderPrivateLogName = 'S3W001P2_1'
,FileReaderFileName = 'S3W001DT'
,FileReaderDirectoryPath = '.'
,FileReaderOpenMode = 'Read'
/********************************************************/
/* APPLY STATEMENT parameters                           */
/********************************************************/
,LoadInstances = 1
,FileReaderInstances = 1
```

<>"ブラケットを適切な値に置き換えて、ブラケットを削除してください。ジョブスクリプトのディレクトリにファイルを保存します（例：C: \Program FilesTeradata ﹑TPT Scripts ﹑jobVarImport）。

### セットアップジョブ（オプション）

このファイルは、Teradataにインポートするためのクリーンアップとターゲットテーブルの作成に使用されます。すでにターゲット・テーブルがあり、以前の実行によるエラーがない場合は、このファイルは必要ありません。セットアップジョブファイルのサンプルは **[こちら](https://docs.teradata.com/reader/p~0sSD4zl4K8YPbEGnM3Rg/vwhRVr1Rdp9JO4~yHJkGjw)** です。

### インポート・ジョブ

設定ファイルや認証ファイルを作成し、<HOME>/awsディレクトリ（Linuxの場合は~/.awsディレクトリ）に配置したと仮定して、以下はインポートジョブのスクリプト例です。

```:data_import.tpt
DEFINE JOB IMPORT_TO_TERADATA
DESCRIPTION 'Import data to Teradata from Amazon S3'
(

    SET TargetTable = '<target table name>';

    STEP IMPORT_THE_DATA
    (
        APPLY $INSERT TO OPERATOR ($LOAD)
        SELECT * FROM OPERATOR ($FILE_READER ()
            ATTR
            (
                AccessModuleName = 'libs3axsmod.dll',
                AccessModuleInitStr = 'S3Bucket=<S3BucketName> S3Prefix="<PrefixName>/" S3Object=<input file name> S3SinglePartFile=True'
            )
        );
```

括弧内の中のパラメータは適切に置き換え、<>括弧は削除してください。ジョブスクリプトのディレクトリ（C:﹑Program FilesTeradata﹑TPT Scripts﹑import）にファイルを保存してください。

注意：Linuxの場合、AccessModuleNameはlibs3axsmod.soを使用してください。

### ジョブ実行

ジョブスクリプトを実行するには、Windowsのコマンドプロンプト（CMD）を開き、ディレクトリをscriptsの場所に変更して、実行します：

▶	tbuild -f <job script> -v <job variable file> -j <job name>
i.e. > tbuild -f import -v jobVarImport -j s32td

<S3BucketName>/<PrefixName>/<入力ファイル名>のデータは、インポートジョブで定義した<ターゲットテーブル名>に読み込まれるはずです。

# おわりに
このようにAmazon S3に置かれた大きなファイルのデータも簡単にVantageに取り込んだり、逆にVantageからS3にデータを書き出すことも可能です。ぜひご活用ください！

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