# Teradata Import Integration

Teradata統合により、Teradata ServerからTreasure Dataへのデータのインポートが可能になります。

## 前提条件

- Treasure Dataの基本的な知識
- Teradata SQLの基本的な知識
- 実行中のTeradataインスタンス


## 新しい認証を作成する

1. **Integrations Hub** > **Catalog**に移動します。
2. **Teradata**を検索して選択します。


![](/assets/screenshot-2025-09-22-at-13.54.24.5d30937afd0315366a6d3a21b90713a0f11faa37f019e9dea6df06e1112faf9e.de62830b.png)

1. ダイアログが開きます。![](/assets/screenshot-2025-09-22-at-13.59.50.f6b3ebecf738cd695dbc99f011ca71868b5c579bfe554bfe41f4ccdcdad8570d.743d8bf4.png)
2. 設定を入力します。
| **Parameters** | **Description** |
|  --- | --- |
| **Host** | Teradataデータベースのホスト情報、例：IPアドレス。 |
| **Port** | インスタンスの接続ポート。Teradataのデフォルトは1025です。 |
| **Username** | Teradataデータベースに接続するためのユーザー名。 |
| **Password** | Teradataデータベースに接続するためのパスワード。 |
| OPTIONS |  |
| **JDBC Connection options** | Teradataデータベースが必要とする特別なJDBC接続。次のJDBCオプションは無視されるため追加しないでください： - DBS_PORT（port設定を使用） - DATABASE（database設定を使用） - USER（user設定を使用） - PASSWORD（password設定を使用） - LOGMECH（現在TD2のみサポート） |
| **connection timeout** | ソケット接続のタイムアウト（秒単位）（デフォルトは300）。 |
| **Network timeout** | ネットワークソケット操作のタイムアウト（秒単位）（デフォルトは1800）。0はタイムアウトなしを意味します。 |
3. 接続の名前を入力し、**Done**を選択します。


## クエリを検証する

SQLクエリからデータをロードする場合は、クエリが有効なSELECTステートメントであることを確認してください。複数のステートメントはサポートされていません。

## 新しい転送を作成する

接続を作成すると、自動的にAuthenticationsタブに移動します。作成した接続を探し、Sourceを選択します。

### インポートタイプ

インポートのソースタイプを選択します。テーブル/ビュー全体をロードする（**table/view loading**）か、SQLの結果をロードする（**query loading**）かを選択します。

### Table/View Loading

テーブル/ビュー全体をロードする場合は、「Table/View」を選択し、ロードする「Table/View name」を入力します。

![](/assets/screenshot-2025-09-22-at-14.13.38.1ca1d9f600bea34154d7dcd98acee705314651e00e74e3e77ba2e57ba15cdcac.743d8bf4.png)

### Query Loading

SQLの結果をロードする場合は、「Query statement」を選択し、「SQL statement」にSQLクエリを入力します。

転送を作成する前に、クエリが有効なSELECTクエリであり、単一のステートメントであることを確認してください。QueryとIncrementalからデータを取得する場合、クエリステートメントはORDER BY句を除外する必要があります

![](/assets/screenshot-2025-09-22-at-14.13.46.1dd0f43843aed8ba2988e2b9768acb7cf8df9df8c5aab1d434f79845b46dbc83.743d8bf4.png)

### Incremental Loading

Incremental Loadingは、自動増分IDカラムやタイムスタンプカラムなど、増加する一意のカラムを使用して、前回の実行後の新しいレコードのみをロードできます。

これを有効にするには、**Incremental Loading**をチェックし、「Incremental Column Name」に増分するカラム名を指定します。

インクリメンタルカラムとしてサポートされているのは、INTEGERまたはBIGINT型とTIMESTAMP型のみです。

この値からインクリメンタルローディングを開始する場合は、Start Afterを入力します。インクリメンタルカラムがTimestamp型の場合、入力はyyyy-MM-dd'T'HH:mm:ss.SSSSSS形式のTimestamp文字列である必要があり、値はUTCタイムゾーンとして扱われます。

### 仕組み

このコネクタは、インクリメンタルカラムで順序付けられた最新のレコードである「last record」を記録します。次の実行では、last recordを使用して次のルールで構築されたクエリを実行してレコードをロードします：

テーブルローディングでは、すべてのフィールドがWHERE句で選択されます。


```sql
SELECT   * FROM   `${dataset}.${table}` WHERE   ${incremental_column} > ${value_of_last_record}
```

クエリローディングでは、生のクエリがWHERE句でラップされます。


```sql
SELECT   * FROM   (${query}) embulk_incremental_ WHERE   ${incremental_column} > ${value_of_last_record}
```

### Data Settings

1. **Next**を選択します。Data Settingsページが開きます。
2. 必要に応じてデータ設定を編集するか、このページをスキップします。


![](/assets/screenshot-2025-10-01-at-11.20.59.d819cf0f8af4a40ce0c72b848885d73b9d4ea020884c6da2ae5ae6d711a3e050.de62830b.png)

| **Parameters** | **Description** |
|  --- | --- |
| **Rows per batch** | 非常に大きなデータセットはメモリの問題を引き起こし、その結果ジョブが失敗する可能性があります。このフラグを使用して、インポートジョブを行数でバッチに分割し、メモリの問題やジョブの失敗の可能性を減らします。無制限の場合は0に設定します。それ以外の場合、値は0より大きい必要があります |


### Data Preview

データソースを設定した後、**Next**を選択し、次に**Next**をクリックして**Generate Preview**をクリックすると、ソースからのサンプル結果が表示されます。

![](/assets/screenshot-2025-06-19-at-20.01.44.dcf46bfcd8a375d6920bf72da305e9137a1b2f13edb80368a3465a32fed59d70.743d8bf4.png)

### Transfer to

プレビューから**Next**を選択すると、データを転送するTreasure Dataのデータベースとテーブルを選択するように求められます。新しいデータベースを作成する場合は、**Create new database**を選択してデータベースに名前を付けます。**Create new table**でも同様の手順を実行します。

既存のテーブルにレコードを追加するか、既存のテーブルを置き換えるかを選択します。

デフォルトのキーとは異なるパーティションキーシードを設定する場合は、「Partition key seed」から選択できます。

![](/assets/screenshot-2025-06-19-at-20.04.48.211e037cc3ab299c70ea11abc8fc249b8df092b3e25887c57ab4b5d60b2a18b4.743d8bf4.png)

### Schedule

SCHEDULEセクションでは、インポートジョブを1回限りの転送として指定するか、自動化された定期的な転送をスケジュールできます。

転送が実行された後、Databasesタブで転送の結果を確認できます。

## Appendix

### Data Conversion

Teradataのデータ型は、次の表に示すように、対応するTreasure Dataの型に自動的に変換されます。テーブル/ビューまたはクエリ結果のスキーマにサポートされていない型を含めると、エラーが発生します。

| Teradata Data Type | TD Data Type |
|  --- | --- |
| BYTEINT | Long |
| SMALLINT | Long |
| INTEGER | Long |
| BIGINT | Long |
| FLOAT | Double |
| DECIMAL | String |
| CHAR | String |
| VARCHAR | String |
| BYTE | Unsupport |
| VARBYTE | Unsupport |
| DATE | String |
| TIME | String |
| TIMESTAMP | Timestamp |
| CLOB | String |
| BLOB | Unsupport |
| Structured UDT | String |
| INTERVAL | String |
| JSON | String |
| XML | String |
| PERIOD | String |
| GEO | String |


### Quotas and Limits

Teradata Serverのクォータと制限。

## CLIでTeradataコネクタを使用する

必要に応じて、[TD Toolbelt](https://toolbelt.treasuredata.com/)を介してコネクタを使用できます。

CLIで[TD Toolbelt](/tools/cli-and-sdks/quickstart)をセットアップします。

### 設定ファイルを作成する

ここでは「config.yml」と呼ばれる設定YAMLファイルを作成します。

例：bigintegerデータ型のインクリメンタルカラムとlast_recordを設定したテーブルからのインポート


```yaml
in:
   type: teradata
   host: xxx
   options: {"xxx": "xxx"}
   connect_timeout:300
   socket_timeout:1800
   user: xxx
   port: 1025
   password: xxxx
   database: xxxxx
   source_type: table_view
   table: xxxx
   fetch_rows: 10000
   incremental: true
   incremental_column: big_int_column
   last_record: 100
```

例：timestampデータ型のインクリメンタルカラムとlast_recordを設定したQueryからのインポート


```yaml
in:
   type: teradata
   host: xxx
   options: {"xxx": "xxx"}
   connect_timeout:300
   socket_timeout:1800
   user: xxx
   port: 1025
   password: xxxx
   database: xxxxx
   source_type: query
   query: |
      SELECT * FROM tbl;  fetch_rows: 10000  incremental: true  incremental_column: created_at  last_record: '2025-08-26T12:10:42.010000'
```

### Parameters

| Name | Description | Type | Value | Default Value | Required |
|  --- | --- | --- | --- | --- | --- |
| type | コネクタタイプ | string | teradata | N/A | Yes |
| host | Teradataサーバーホスト | string | N/A | N/A | Yes |
| port | Teradataサーバーポート | number | N/A | 1025 |  |
| options | Teradata JDBCオプション | string (ハッシュオブジェクト形式) | N/A | N/A | No |
| connect_timeout | Teradataログオンタイムアウト | number | N/A | 300 | No |
| socket_timeout | ネットワークソケット操作のタイムアウト | number | N/A | 1800 | No |
| database | Teradataデータベース | string | N/A | N/A | Yes |
| source_type | ソースインポート | string | サポート値： - table_view - query | table | Yes |
| table | テーブル名 | string | N/A | N/A | source_typeがtable_viewの場合は必須 |
| query | SQLステートメント | string | N/A | N/A | source_typeがqueryの場合は必須 |
| incremental | インクリメンタルローディングを有効にするかどうか | boolean | true/false | false | No |
| incremental_column | インクリメンタルローディング用のカラム名 INTEGER、BIGINTまたはTIMESTAMPデータ型のみサポート | string | N/A | N/A | incrementalがtrueの場合は必須 |
| last_record | この値からインクリメンタルインポートを開始します。カラムインクリメンタルがtimestampデータ型の場合、この値はyyyy-MM-dd'T'HH:mm:ss.SSSSSS形式に従う必要があり、UTCタイムゾーンとして扱われます | string | N/A | N/A | No |


#### （オプション）Preview

設定ファイルを検証するために、td [td connector:preview](/tools/cli-and-sdks/api#td-connector-preview)コマンドを実行します


```bash
td connector:preview config.yml
```

### 新しいコネクタセッションを作成する

[td connector:create](/tools/cli-and-sdks/api#td-connector-create)を実行します。

次の例では、Teradataコネクタを使用した日次インポートセッションが作成されます。


```bash
td connector:create daily_teradata_import \
"10 0 * * *" td_sample_db td_sample_table config.yml
```

### Data Partition Key

コネクタセッションでは、結果データにデータパーティションキーとして使用される少なくとも1つのタイムスタンプカラムが必要であり、デフォルトでは最初のタイムスタンプカラムがキーとして選択されます。カラムを明示的に指定する場合は、「**--time-column**」オプションを使用します。


```bash
$ td connector:create --time-column created_at \
daily_teradata_import ...
```

結果データにタイムスタンプカラムがない場合は、次のようにフィルタ設定を追加して「**time**」カラムを追加します。


```yaml
in:
   type: teradata
   ...
filters:
   - type: add_time
     from_value:
       mode: upload_time
     to_column:
       name: time
out:
   type: td
```