
【Informatica IDMC】Amazon S3 csvファイル ターゲット の形式オプション検証
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
データアナリティクス事業本部ビッグデータチームのyosh-kです。
今回はIDMC CDIでターゲットがS3のcsvファイルである場合に、形式オプションの設定により、どのような差異があるかを検証したいと思います。
前提条件
- IICS CDIを操作できる環境を構築済みであることを前提とします。
- Redshift ServerlessからS3 Bucketへのロード処理を行います。
※ Redshift Serverless接続は以下のブログをご参照ください。
IICS CDI Amazon Redshift V2 ConnectorでRedshift Serverlessと接続できるか試してみた
- 以下SQLよりデータをRedshift Serverless上に用意します。
Table作成
CREATE TABLE IF NOT EXISTS memo( seq BIGINT, memo VARCHAR(100) , update_at TIMESTAMP ) DISTSTYLE AUTO SORTKEY AUTO;
Insert data
INSERT INTO memo (seq,memo, update_at) VALUES (1,'①テスト', '2024-01-01 00:00:00'), (2,'test2\\hoge', '2024-01-01 00:00:00'), (3,'test3"', '2024-01-01 00:00:00'), (4,'test4,', '2024-01-01 00:00:00') ;

概要
今回は、ソースにRedshift Serverless上に作成したテーブルを指定し、ターゲットをS3 Bucketとしてcsvを出力します。
ターゲットの形式オプションから設定を確認します。

こちらがデフォルトの形式オプションの設定となります。

| 設定 | デフォルト | 説明 |
|---|---|---|
| 区切り文字 | , | 2 つのデータ列間の境界を示す。次のオプションのいずれかを選択。 カンマ(,)、tab、コロン(:)、セミコロン(;) |
| エスケープ文字 | \ | エスケープさせる文字の前に指定する文字。カンマなどの特殊文字を通常の文字として扱う。 |
| 修飾子 | " | 文字列の境界を定義する文字。囲み文字と同意と理解している。 |
| 修飾子モード | MINIMAL | ターゲットの修飾子の動作を指定。以下のオプションのいずれかを選択できる: Minimal: デフォルトモード。区切り値または特殊文字で囲まれたデータに修飾子を適用する。 ALL:すべてのデータに修飾子を適用する。 Non_Numeric:情報を確認できず。 All_Non_Null:情報を確認できず。 |
| Disable escape char when a qualifier is set | チェック | 修飾子モードが記載されている場合にエスケープ文字は無効となる。 |
| コードページ | UTF-8 | Secure Agent がデータを読み取るために使用する必要があるコード ページを選択する。csvに出力する際の文字コードとなる。 |
| ヘッダー行番号 | 1 | データのヘッダー行番号の指定。 |
| 最初のデータ行 | 2 | 最初のデータ行の指定。 |
| ターゲットヘッダー | With Header | ターゲットファイルのヘッダー有無を選択。 |
| ディストリビューションカラム | 複数ターゲットを生成する際の分散カラムを指定。 | |
| プレビューする最大行数 | プレビューする最大行数。 | |
| 行区切り文字 | データの行を区切るための文字として設定できる。以下の値を設定可能。\r\n,\n, \r |
- Formatting Options
- Distribution column
- After the R39 upgrade, the data is written to Amazon S3 V2 target without Double quotes.
今回は上記、修飾子モードのMINIMALとALLの挙動の違い、また、コードページをShift-JISにした際の挙動について確認していきます。
検証1 修飾子モードをMINIMAL
まずはデフォルトの状態で検証します。

実行後に生成されたcsvファイルです。MINIMALモードの場合は、区切り値または特殊文字で囲まれたデータに修飾子を適用するので、3,4行目で修飾子"で囲んでいます。2行目の\についてはエスケープされていることが確認でき、3行目の"もエスケープ処理されていることがわかります。それ以外の値については、修飾子"が適用されていないことを確認しました。

検証2 修飾子モードをALL
修飾子モードをALLに修正して検証します。

全ての値が修飾子"で囲まれていることを確認しました。

検証3 コードページをShift-JIS
コードページをUTF-8からShift-JISに修正して検証してみます。

結果としては、1行目の①という文字列がShift-JISでは文字化けしてしまいます。
UTF-8で開いた場合
Shift-JISで開いた場合

これは、①という文字列がShift-JISでは取り扱えず、正式にはCP932で取り扱える文字列であるためです。そのため、IICSで取り扱う場合は、全てのUnicode文字をカバーしているUTF-8を選択する必要があります。
最後に
検証した結果、修飾子モードは、全ての値に修飾子が付かないMINIMALではなく、ALLを利用していくのがフォーマットを統一する上でも安全であると思いました。






