csvファイルをjson に変換してパイプライン変数に格納 (Azure Data Factory)
BLOBストレージ上のcsvファイルをパイプライン変数に格納する例。
csvファイルの内容をjsonにしてWeb Accessアクティビティに使用したい場合。
本来は、Copyアクティビティを使って変換するが、Copyアクティビティではできないような細かな処理を行いたい場合に、無理やり文字列操作で実現する。
この処理の場合、改行コードなどJSONでエスケープしなければならない文字列を全て自前でエスケープする必要がある。
1.BLOBストレージ上のCSVファイル
"name01","value01"
"name02","value02"
2.変換後のjson
{
"records" : [
{ "id" : "name01", "info" : "value01"},
{ "id" : "name02", "info" : "value02"}
]
}
3. パイプライン
3.1. パイプライン変数
BUFFER_V1_1 String
BUFFER_V1_2 String
BUFFER_V1_3 String
3.2. パイプライン構成
3.3. Lookup1 (参照)
- SRC …. json ファイルを指定
- 「先頭行のみ」のチェックをはずす
3.4. ForEach1 (繰り返し)
- 順次にチェック
- 項目:
@activity('Lookup1').output.value
3.5. Set V1 (変数の設定)
- 変数:BUFFER_V1_1
- 項目:
@concat(variable('BUFFER_V1_2'), '{"id":"', ESCAPE(item().Prop_0), '","info":"', ESCAPE(item().Prop_1),'"}')
ここで、上記 ESCAPE()の部分は実際には以下の記述になる。
uriComponentToString(replace(replace(replace(replace(replace(urlComponent(coalesce( *** , ”)),’%5C’,’%5C%5C’), ‘%22′,’%5C%22’), ‘%0D’,’%5Cr’), ‘%0A’, ‘%5Cn’), ‘%09’, ‘%5Ct’))
replace(**, ‘%5C’,’%5C%5C) ….. “\”を”\\”に置換
replace(**, ‘%22’,’%5C%22) ….. “”” を “\””に置換
replace(‘**’, ‘%0D’,’%5Cr’) …. \rを “\r”に置換
replace(‘**’, ‘%0A’,’%5Cn’) …. \nを “\n”に置換
replace(‘**’, ‘%09′,’%5Ct’) ….. \t を “\t”日間
3.6. Set V2 (変数の設定)
- 変数:BUFFER_V1_2
- 項目:
@concat(variable('BUFFER_V1_1'), ',')
3.7. Set V3 (変数の設定)
- 変数:BUFFER_V1_3
- 項目:
@concat(variable('BUFFER_V1_3'), '{ "records" [', variable('BUFFER_V1_1'),'}')
以上で、上記パイプラインが終わったあとに、変数 BUFFER_V1_31には、返還後のjson文字列が入っている。
■関連記事
csvをjsonにCopy アクティビティを使って変換 (Azure Data Factory)