SnowflakeからTeradataへのデータ移行検証レポート
前回は、Snowflakeからのデータ抽出方法についてご紹介しました。
今回はその続編として、抽出したデータをTeradataにロードする方法について解説します。
1.ファイル出力設定(TPT)
Teradata Parallel Transporter(TPT)を使用してsnowflakeで出力されたファイルを登録する際には、接続情報、抽出クエリ、出力先などをTPTスクリプトに記述する必要があります。
✅ 補足 :
S3のファイルを参照する場合、TPTに加えてS3 Access Moduleのインストールが必要です。
[ダウンロードサイト]: https://downloads.teradata.com/
3. SQLクエリに関する注意点
移行にあたっては、SQLクエリ内でデータ型に応じた変換や整形処理が必要でした。
Date型 / Timestamp型
→ 日付がYYYY-MM-DDとなっているため、Teradataでは一般的なYYYY/MM/DDの日付フォーマットに変更
補足
Teradataへのデータ移行では、データ型の違い・文字列フォーマットの調整・ファイルサイズ制限など、テーブル定義・クエリ処理の両面で慎重な対応が求められます。
Teradataのパラメータ
実行コマンド:
tbuild -f job_table.txt -v テーブル名.txt -j job_table -e UTF-8
[-f job_table.txt]
ファイル出力用のパラメータを設定ファイル
TPT出力時の主なパラメータ一覧と設定ポイント
# | パラメータ | 説明 |
---|---|---|
1 | OpenQuoteMark | 値の先頭に付与する引用符。例:"(ダブルクォーテーション) |
2 | CloseQuoteMark | 値の末尾に付与する引用符。例:"(ダブルクォーテーション) |
3 | AccessModuleName | オブジェクトストレージ(S3等)に書き込むためのアクセスモジュール名 |
4 | S3ConfigDir | IAMクレデンシャルファイルの格納ディレクトリパスを指定 |
5 | S3Bucket | 出力先となるS3バケット名 |
6 | S3Prefix | S3バケット配下の保存先ディレクトリ(プレフィックス)名 |
7 | S3Object | 出力ファイル名。.gz 拡張子を指定すると自動でGzip圧縮される |
8 | S3MaxObjectSize | 出力ファイルの最大サイズ(バイト単位)。超過時は自動でファイル分割される |
9 | S3DontSplitRows | レコード途中での分割を防ぐため、必ず True を設定することが推奨される |
QuoteMark(引用符)の設定について
OpenQuoteMark および CloseQuoteMark には、ダブルクォーテーション(") を設定しました。
✅ 理由:
出力対象の文字列カラムに改行コード(LF/CR)やカンマなどの区切り文字が含まれている場合、
QuoteMarkを指定しないと、1行の終端を正しく判別できず、ファイル解析時に不整合が発生する恐れがあるためです。
補足
・出力ファイルをGzip圧縮したい場合は、S3Object に拡張子 .gz を明示的に付けるだけで自動で圧縮されます(TPTの仕様による)。
・巨大なファイルサイズとなる場合は S3MaxObjectSize を設定し、かつ S3DontSplitRows を True にして、レコード単位での分割出力を確実に行えるようにすることが重要です。
[-v テーブル名.txt]
Teradata接続アカウントやクエリを記載するファイル
Teradataからのデータ抽出時に使用するTPTパラメータ一覧
以下は、Teradataからデータを抽出してファイル出力する際に使用した主なTPTパラメータです。
# | パラメータ | 説明 |
---|---|---|
1 | ExportTdpid | Teradataへの接続先識別子(ホスト名等) |
2 | ExportUsername | Teradataの接続ユーザー名 |
3 | ExportUserPassword | 上記ユーザーのパスワード |
4 | FileWriterTextDelimiter | 値の区切り文字(デリミタ) |
5 | ExportSelectStmt | 抽出対象となるSQLクエリ |
デリミタに「|(パイプ)」を採用した理由
✅ 理由:
カンマ(,)やタブ(\t)などの一般的な区切り文字は、抽出対象の文字列値そのものに含まれている可能性が高く、フィールドの区切りと混同される恐れがあります。
そのため、あまり使用されない記号である | をデリミタとして採用することで、データの構造を明確にし、後続の処理や解析での不具合を回避しました。
[ -j job_table ]
job_table.txtファイル上に記載されているジョブ名
DEFINE JOB job_table
snowflakeへのデータロード