CHR関数と式トランスフォーメーションで改行コードを挟んで文字列を結合する

2022.09.21

データアナリティクス事業本部の鈴木です。

Informatica Intelligent Cloud Services(以降、IICS)のInformatica Cloud Data Integration(以降、CDI)でCSVファイルを処理する際、式トランスフォーメーションの機能を使って文字列の入ったカラム同士を改行コードを挟んで結合できるか確認しました。

この記事の目的

特殊なケースではありますが、CSVファイルで、説明書きが入っているカラムだと、改行が入っていることがあります。例えば、エクセルでファイル作成・中身を確認するようなユースケースです。CDIでもカラムの値に改行が入ったファイルを作成することができましたが、CHR関数を使って改行コードを指定する必要があったので記事にしました。

構成とデータについて

構成は以下のようにします。入力用バケットにsample.csvを置いておき、CDIで加工した後、出力用バケットにoutput.csvとして出力します。

構成

同様の構成は以下で扱いました。

データは以下のようなCSVファイルを準備しました。今回は2カラムをLFを挟んで結合したものを新しいカラムとし(私の環境のExcelだとセル内改行はLFだったので)、CSVファイルを出力としてS3に保存します。

sample.csv

text1,text2
"こんにちは","よろしくおねがいします。"
"こんばんは","おつかれさまでした。"

参考にしたドキュメント

式トランスフォーメーションの日本語版のドキュメントは以下です。

英語版のドキュメントは以下です。

CHR関数のドキュメントは以下になります。CHR関数は文字コードを渡すことにより、その文字コードに対応した文字を返却します。

CHR関数に渡す文字コードは、Data Integration ServiceでASCIIモードを使っているか、Unicodeモードを使っているかによって異なることに注意が必要なようです。

やってみる

1. マッピングの作成

データ統合の、マッピングを作成したい場所で、新規 > マッピング > マッピングを押して、マッピングを新規作成します。

マッピングの作成

今回はS3にあるCSVファイルを取得して、式トランスフォーメーションで加工し、同じくS3に出力するようにしたいので、ソーストランスフォーメーションとターゲットトランスフォーメーションをそのように設定しておきます。

マッピングの初期状態

S3への接続については、以下の記事も参考になります。

2. 式トランスフォーメーションの設定

ソーストランスフォーメーションとターゲットトランスフォーメーションの間に、式トランスフォーメーションをドラッグ&ドロップします。

式トランスフォーメーションの追加

式トランスフォーメーションをクリックし、プロパティ > のプラスマークを押します。

フィールドの追加

新しいフィールドに設定を記載します。特にフィールドタイプは出力フィールドを設定しました。

フィールドの設定

次に式の内容を設定します。

式の設定

文字列の結合には||LFにはCHR(13)を使いました。

式の設定

3. ターゲットの設定

ターゲットトランスフォーメーションの設定を修正しておきました。受信フィールドで、式トランスフォーメーションで作成した出力フィールドのみ受信するように再設定しておきます。

ターゲットの設定

今回は実際にエクセルで開くと改行されているか分かりやすかったので、文字化けしないよう、出力の文字コードをShift-JISにしておきました。これはターゲット > 形式オプション > コードページで設定しました。

文字コードの設定

ターゲットフィールドに設定が反映されていない場合は、再読み込みしておきます。

ターゲットフィールドの読み込み

4. 実行結果の確認

作成したマッピングを実行し、結果を確認しました。変更を保存したことを確認して、マッピングの画面から、実行を押して実行します。

マッピングの実行

S3の該当の場所にCSVファイルが作成できました。

出力結果

ダウンロードしてエクセルで開くと、確かに改行されていることが確認できました。

結果の確認

最後に

今回はCDIの式トランスフォーメーションの機能を使って、CSVファイルの文字列の入ったカラム同士を改行コードを挟んで新しいカラムとし、S3の別のCSVファイルに出力する例をご紹介しました。参考になりましたら幸いです。