0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SnowflakeからTeradataへのデータマイグレーション-2

Posted at

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接続アカウントやクエリを記載するファイル
parameter2.png

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へのデータロード

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?