【Informatica IDMC】Amazon S3 csvファイル ターゲット の形式オプション検証

2023.09.30

はじめに

データアナリティクス事業本部ビッグデータチームのkasamaです。
今回は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

今回は上記、修飾子モードのMINIMALALLの挙動の違い、また、コードページを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を選択する必要があります。

本当は怖くないCP932

最後に

検証した結果、修飾子モードは、全ての値に修飾子が付かないMINIMALではなく、ALLを利用していくのがフォーマットを統一する上でも安全であると思いました。