

# Teradata Vantage NOS 接続
<a name="connecting-to-data-teradata-nos"></a>

 Teradata NOS (Native Object Store) 接続は、Teradata Vantage の新しい接続です。これは、Teradata WRITE\_NOS クエリを活用して既存のテーブルから読み取り、READ\_NOS クエリを使用してテーブルに書き込みます。これらのクエリはステージングディレクトリとして Amazon S3 を使用するため、Teradata NOS コネクタは、既存の Teradata コネクタ (JDBC ベース) よりも高速で、特に大量のデータを処理できます。

 Spark 向けの AWS Glue の Teradata NOS 接続を使用して、AWS Glue 5.0 以降のバージョンの Teradata Vantage の既存テーブルからの読み取りやテーブルへの書き込みを行うことができます。SQL クエリを使用して、Teradata から何を読み取るかを定義できます。AWS Glue 接続を介して AWS Secrets Manager に保存されているユーザー名およびパスワードの認証情報を使用して Teradata に接続できます。

 Teradata の詳細については、[Teradata のドキュメント](https://docs.teradata.com/)を参照してください。

**Topics**
+ [Teradata NOS 接続の作成](#creating-teradata-nos-connection)
+ [Teradata テーブルからの読み取り](#reading-from-teradata-nos-tables)
+ [Teradata テーブルへの書き込み](#writing-to-teradata-nos-tables)
+ [Teradata 接続オプションのリファレンス](#teradata-nos-connection-option-reference)
+ [AWS Glue ビジュアル ETL UI のオプションを指定する](#teradata-nos-connection-option-visual-etl-ui)

## Teradata NOS 接続の作成
<a name="creating-teradata-nos-connection"></a>

AWS Glue から Teradata NOS に接続するには、Teradata 認証情報を作成して AWS Secrets Manager シークレットに保存し、そのシークレットを AWS Glue Teradata NOS 接続に関連付ける必要があります。Teradata インスタンスが Amazon VPC 内にある場合は、AWS Glue Teradata NOS 接続にネットワークオプションを提供する必要もあります。

 **前提条件**: 
+  Amazon VPC を通じて Teradata 環境にアクセスしている場合は、AWS Glue ジョブが Teradata 環境と通信できるように Amazon VPC を設定します。パブリックインターネット経由で Teradata 環境にアクセスすることは推奨されていません。
+  Amazon VPC で、AWS Glue がジョブの実行中に使用する [VPC]、[サブネット]、および [セキュリティグループ] を特定または作成します。さらに、Teradata インスタンスとこの場所の間のネットワークトラフィックを許可するように Amazon VPC が設定されているようにする必要があります。ジョブでは、Teradata クライアントポートとの TCP 接続を確立する必要があります。Teradata ポートの詳細については、「[Teradata Vantage のセキュリティグループ](https://docs.teradata.com/r/Teradata-VantageTM-on-AWS-DIY-Installation-and-Administration-Guide/April-2020/Before-Deploying-Vantage-on-AWS-DIY/Security-Groups-and-Ports)」を参照してください。
+  ネットワークレイアウトに応じて、安全な VPC 接続を実現するには、Amazon VPC および他のネットワークサービスの変更が必要な場合があります。AWS 接続の詳細については、Teradata ドキュメントの「[AWS 接続オプション](https://docs.teradata.com/r/Teradata-VantageCloud-Enterprise/Get-Started/Connecting-Your-Environment/AWS-Connectivity-Options)」を参照してください。

### AWS Glue Teradata NOS 接続を設定するには:
<a name="creating-teradata-nos-connection-procedure"></a>

1.  Teradata 設定で、AWS Glue が接続する {{teradataUsername}} と {{teradataPassword}} を識別または作成します。詳細については、Teradata ドキュメントの「[ Vantage セキュリティの概要を 参照してください](https://docs.teradata.com/r/Configuring-Teradata-VantageTM-After-Installation/January-2021/Security-Overview/Vantage-Security-Overview)」を参照してください。

1.  AWS Secrets Manager で、Teradata 認証情報を使用してシークレットを作成します。AWS Secrets Manager でシークレットを作成するには、AWS Secrets Manager ドキュメントの「[AWS Secrets Manager シークレットを作成する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)」にあるチュートリアルに従ってください。シークレットを作成したら、次のステップのためにシークレット名 {{secretName}} を保存しておきます。
   +  [Key/value ペア] を選択する際に、キー USERNAME と値 {{teradataUsername}} のペアを作成します。
   +  [Key/value ペア] を選択する際に、キー PASSWORD と値 {{teradataPassword}} のペアを作成します。

1.  AWS Glue コンソールで、「[AWS Glue 接続の追加](https://docs.aws.amazon.com/glue/latest/dg/console-connections.html)」にあるステップに従って接続を作成します。接続を作成したら、次のステップのために接続名 {{connectionName}} を保存しておきます。
   +  **[接続タイプ]** を選択する際に、[Teradata Vantage NOS] を選択します。
   +  [JDBC URL] を入力する場合は、インスタンスの URL を入力します。JDBC URL に特定のカンマ区切りの接続パラメータをハードコーディングすることもできます。URL は次の形式に準拠する必要があります: ` jdbc:teradata://teradataHostname/ParameterName=ParameterValue,ParameterName=ParameterValue `。
   +  サポートされる URL パラメータには次が含まれます。
     +  `DATABASE` – デフォルトでアクセスするホスト上のデータベースの名前。
     +  `DBS_PORT` – データベースポート。非標準ポートで実行する場合に使用されます。
   +  **[認証情報タイプ]** を選択する際は、[AWS Secrets Manager] を選択し、**[AWS シークレット]** を {{secretName}} に設定します。

1.  次の状況では、追加の設定が必要になる場合があります。
   +  Amazon VPC 内の AWS でホストされている Teradata インスタンスの場合、Teradata セキュリティ認証情報を定義する AWS Glue 接続に、Amazon VPC 接続に関する情報を提供する必要があります。接続を作成または更新する際に、**[ネットワークオプション]** で **[VPC]**、**[サブネット]**、および **[セキュリティグループ]** を設定します。

 AWS Glue Teradata Vantage NOS 接続を作成したら、接続メソッドを呼び出す前に次のステップを実行する必要があります。

1.  AWS Glue ジョブに関連付けられている IAM ロールに {{secretName}} を読み取るアクセス許可を付与します。

1.  AWS Glue ジョブ設定では、**[接続]** で **[Additional network connection] (追加のネットワーク接続)** として {{connectionName}} を指定します。

## Teradata テーブルからの読み取り
<a name="reading-from-teradata-nos-tables"></a>

### 前提条件:
<a name="w2aac67c11c24b8c41c17b3"></a>
+  読み取り元とする Teradata テーブル。テーブル名 {{tableName}} が必要になります。
+  Teradata 環境には、`staging_fs_url` オプションで指定された Amazon S3 パスである {{stagingFsUrl}} への書き込みアクセス権があります。
+  AWS Glue ジョブに関連付けられた IAM ロールには、`staging_fs_url` オプションで指定された Amazon S3 ロケーションへの書き込みアクセス権があります。
+  認証情報を提供するように設定された AWS Glue Teradata NOS 接続。認証情報を設定するステップ [AWS Glue Teradata NOS 接続を設定するには:](#creating-teradata-nos-connection-procedure) を完了します。AWS Glue 接続の名前、{{connectionName}} が必要になります。

 例: 

```
teradata_read_table = glueContext.create_dynamic_frame.from_options(
    connection_type= {{"teradatanos"}},
    connection_options={
        "connectionName": {{"connectionName"}},
        "dbtable": {{"tableName"}},
        "staging_fs_url": {{"stagingFsUrl"}}
    }
)
```

 SELECT SQL クエリを指定して、DynamicFrame に返される結果をフィルタリングすることもできます。クエリを設定する必要があります。dbTable とクエリの両方を設定すると、コネクタはデータの読み取りに失敗します。例えば、次のようになります。

```
teradata_read_query = glueContext.create_dynamic_frame.from_options(
    connection_type={{"teradatanos"}},
    connection_options={
        "connectionName": {{"connectionName"}},
        "query": {{"query"}},
        "staging_fs_url": {{"stagingFsUrl"}}
    }
)
```

 さらに、Spark DataFrame API を使用して Teradata テーブルから読み取ることができます。例えば、次のようになります。

```
options = {
    "url": {{"JDBC_URL"}},
    "dbtable": {{"tableName"}},
    "user": {{"teradataUsername"}}, # or use "username" as key here
    "password": {{"teradataPassword"}},
    "staging_fs_url": {{"stagingFsUrl}}"
}
teradata_read_table = spark.read.format("teradatanos").option(**options).load()
```

## Teradata テーブルへの書き込み
<a name="writing-to-teradata-nos-tables"></a>

### 前提条件
<a name="writing-to-teradata-nos-tables-prerequisites"></a>
+  書き込み先とする Teradata テーブル: {{tableName}}。
+  Teradata 環境には、`staging_fs_url` オプションで指定された Amazon S3 の場所である {{stagingFsUrl}} への読み取りアクセス権があります。
+  AWS Glue ジョブに関連付けられた IAM ロールには、`staging_fs_url` オプションで指定された Amazon S3 ロケーションへの書き込みアクセス権があります。
+  認証情報を提供するように設定された AWS Glue Teradata 接続。認証情報を設定するには、「[AWS Glue Teradata NOS 接続を設定するには:](#creating-teradata-nos-connection-procedure)」の手順を実行します。AWS Glue 接続の名前、{{connectionName}} が必要になります。

   例えば、次のようになります。

  ```
  teradata_write = glueContext.write_dynamic_frame.from_options(
      frame=dynamicFrame,
      connection_type= {{"teradatanos"}},
      connection_options={
          "connectionName": {{"connectionName"}}, 
          "dbtable": {{"tableName"}},
          "staging_fs_url": {{"stagingFsUrl"}}
      }
  )
  ```

## Teradata 接続オプションのリファレンス
<a name="teradata-nos-connection-option-reference"></a>

 **接続とオペレーションのオプション：**
+  `connectionName` — 必須。読み込み/書き込みに使用されます。認証およびネットワークの情報をお使いの接続方法に提供するように設定された AWS Glue Teradata 接続の名前。
+  `staging_fs_url` — 必須。読み込み/書き込みに使用されます。Amazon S3 の書き込み可能な場所。Teradata から読み取るときにはアンロードされたデータに使用され、Teradata に書き込むときには Parquet データが Redshift にロードされます。S3 バケットは、AWS Glue ジョブのリージョンと同じリージョンにある必要があります。
+  `dbtable` — 書き込みの場合は必須。`query` が指定されていない限り、読み取りの場合は必須。読み込み/書き込みに使用されます。接続メソッドがインタラクションするテーブルの名前。
+  `query` — 読み取りに使用。Teradata から読み取るときに何を取得するかを定義する SELECT SQL クエリ。`dbtable` オプションが指定されている場合、パスすることはできません。
+  `clean_staging_s3_dir` - オプション。読み込み/書き込みに使用されます。true の場合は、読み取りまたは書き込み後にステージング Amazon S3 オブジェクトをクリーンアップします。デフォルト値は True です。
+  `pre_actions` - オプション。書き込みに使用。Spark と Teradata Vantage の間でデータが転送される前に実行される SQL コマンドのセミコロン区切りリスト。
+  `post_actions` - オプション。書き込みに使用。Spark と Teradata Vantage の間でデータが転送された後に実行される SQL コマンドのセミコロン区切りリスト。
+  `truncate` - オプション。書き込みに使用。true の場合、コネクタは上書きモードで書き込むときにテーブルを切り捨てます。false の場合、コネクタは上書きモードで書き込むときにテーブルをドロップします。デフォルト値は false です。
+  `create_table_script` - オプション。書き込みに使用。Teradata Vantage に書き込むときにテーブルを作成する SQL ステートメント。カスタムメタデータ (CREATE MULTISET や SET テーブル、プライマリインデックスの変更など) を使用してテーブルを作成する場合に便利です。テーブル作成スクリプトで使用されるテーブル名は、`dbtable` オプションで指定されたテーブル名と一致する必要があることに注意してください。
+  `partition_size_in_mb` - オプション。読み取りに使用されます。ステージング Amazon S3 オブジェクトの読み取り中の Spark パーティションの最大サイズ (メガバイト)。デフォルト値は 128 です。

 Teradata ノードを作成する際に、高度なオプションを指定できます。これらのオプションは Spark AWS Glue スクリプトのプログラミング時に使用できるオプションと同じです。

 「[Teradata Vantage 接続](aws-glue-programming-etl-connect-teradata-home.md)」を参照してください。

 **認可オプション** 

 以下は、コネクタがステージング Amazon S3 バケットにアクセスするために使用する AWS アカウント認証情報を提供するために使用されるオプションです。(1) 認証オプションを一切提供せず、AWS Glue 実行ロールから生成された一時的な認証情報を使用するか、(2) 作成した認証オブジェクト `auth_object` を提供するか、(3) 長期認証情報を使用する場合は `aws_access_key_id and aws_secret_access_key` を提供するか、または一時的な認証情報を使用する場合は `aws_access_key`、`aws_secret_access_key`、および `aws_session_token` を提供するかを選択できます。
+  `auth_object` - オプション。ステージング Amazon S3 バケットへのアクセスに使用されます。Teradata インスタンスで作成された認証オブジェクト文字列。指定すると、コネクタはこの認証オブジェクトを使用してステージング Amazon S3 バケットにアクセスします。指定がなく、`aws_secret_access_key` と AWS Glue も指定されていない場合、一時的な認証情報が `aws_access_key_id` 実行ロールから取得され、コネクタによって使用されます。この認証オブジェクトに関連付けられた AWS アカウントは、AWS Glue ジョブおよびステージング Amazon S3 バケットと同じリージョンにあるか、クロスアカウント信頼が設定されている必要があります。
+  `aws_access_key_id` - オプション。ステージング Amazon S3 バケットへのアクセスに使用されます。AWS アカウントセキュリティ認証情報の一部。`auth_object` の指定がなく、 `aws_access_key_id` が `aws_secret_access_key` に提供されている場合、コネクタはそれらを使用してステージング Amazon S3 バケットにアクセスします。このアクセスキーに関連付けられた AWS アカウントは、AWS Glue ジョブおよびステージング Amazon S3 バケットと同じリージョンにあるか、クロスアカウント信頼が設定されている必要があります。
+  `aws_secret_access_key` - オプション。ステージング Amazon S3 バケットへのアクセスに使用されます。AWS アカウントセキュリティ認証情報の一部。`auth_object` の指定がなく、 `aws_secret_access_key` が `aws_access_key_id` に設定されている場合、コネクタはそれらを使用してステージング Amazon S3 バケットにアクセスします。このシークレットキーに関連付けられた AWS アカウントは、AWS Glue ジョブとステージング Amazon S3 バケットと同じリージョンにあるか、クロスアカウント信頼が設定されている必要があります。
+  `aws_session_token` - オプション。ステージング Amazon S3 バケットへのアクセスに使用されます。一時的な AWS アカウントセキュリティ認証情報の一部。`aws_access_key_id` と `aws_secret_access_key` を指定する必要があります。

## AWS Glue ビジュアル ETL UI のオプションを指定する
<a name="teradata-nos-connection-option-visual-etl-ui"></a>

 ビジュアル ETL ジョブ UI で上記のすべてのオプションを指定できます。connectionName オプションは、Teradata Vantage NOS 接続のドロップダウンリストから選択します。他のすべてのオプションについては、カスタム Teradata Vantage NOS プロパティをキーと値のペアとして指定する必要があります。

![ウィンドウペインで Teradata NOS Vantage 接続が選択されています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/teradata-nos-vantage-connection-options.png)
