Xplenty : S3やSFTP/FTPSなどストレージ連携機能について

今回のブログでは、Xplentyのストレージ連携機能について詳しく解説します。

#Xplentyのストレージ連携対象
- S3 ※S3側の権限設定は[こちら](https://www.xplenty.com/docs/allowing-xplenty-access-to-data-on-amazon-s3/)の手順を参考に設定ください。
- SFTP ※SSH TunnelおよびReverse SSH Tunnelサポート
- FTPS ※Explicit modeのみ可
- Azure Blob Storage
- Google Cloud Storage
- HDFS(Hadoop Distributed File System)

#便利な機能
##1. 柔軟なSourceフォルダ・ファイル取得設定
###1-1. 曖昧検索による条件設定
アスタリスク検索により条件にフィットする**全てのファイル**を取得できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/e47d9e9e-4666-3362-ba6b-e14d5c15df76.png)

###1-2. ユーザー変数による取得条件の設定
相対日付による条件設定
関数を使うことで、今日や昨日などの相対日付に基づいた条件設定が可能です。

昨日を表現する関数式：
`ToString(SubtractDuration(SwitchTimeZone(CurrentTime(),'Asia/Tokyo'),'PT24H'), 'yyyy/MM/dd')`

今日を表現する関数式：
`ToString(SwitchTimeZone(CurrentTime(),'Asia/Tokyo'),'yyyy-MM-dd')`

さらに、上記の関数式を変数として定義することで、データ取込先のディレクトリやファイル名をより柔軟に設定できます。

###1-3. 正規表現による条件設定

正規表現を使うことでよりリッチな条件設定が可能です。

例１：`/2020-01-{01,02,03}/impressions/*`
/2020-01-01/impressions/*、/2020-01-02/impressions/* 、 /2020-01-03/impressions/* のいずれかに一致。

例２：`/201[0-9]/01/*`
/2010/01/*、 /2011/01/*、 /2012/01/* 、... 、 /2019/01/* のいずれかに一致。

###1-4. 複数のファイルが検索条件でヒットした場合
ファイル検索条件が複数ファイルと合致した場合、合致する全てのファイルを取得します。
**複数ファイルが条件に合致することが想定される場合、各ファイルのフィールド名が同じである必要があります。**

##2. インクリメンタルロード（未だ取り込まれていないファイルのみを取り込み）
これまでの取り込み履歴をManifestファイルで保管し、フォルダ内のファイルのうち、取り込み履歴にない新しいファイルのみを取得していくことができます。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/935cc72d-ea36-0f67-1fcf-06504821f7c6.png)

Manifest fileの中身はこれまで取り込んだファイル情報（ファイルパスやファイルサイズ）が保管されており、リストにないファイルのみを差分処理対象として判別します。
*Manifestのパスを指定する場合、パスで指定したディレクトリが存在しない場合は自動で作成されます。

#3. 日本特有のファイル仕様に対応
##3-1. エンコーディングオプション：Windows-31J
XplentyではShift-JISでエンコーディングされたCSV,TSVファイル以外に、Shift_JISを拡張した文字コードである「Windows-31J」をサポートしています。「Windows-31J」を使うことで、Shift-JISでは文字化けするような拡張文字である「①」、「㈱」などの文字を含むテキストファイルについても文字化けせずに処理することが可能です。

ストレージのSource コンポーネントおよびDestinationコンポーネントで、以下のように設定可能です。

**Source コンポーネント**
Source actionで「**Copy, merge and process all files**」もしくは「**Process only new files (Incremental load)**」を選択し、Character encodingのリストボックスで「**Windows-31J** 」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/b8b265b8-d600-f513-abf4-bea2c2661310.png)

**Destination コンポーネント**
Destination actionで「**Use intermediate storage and copy files to an existing directory in destination**」を選択し、Character encodingのリストボックスで「**Windows-31J**」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/caaafee2-fbc2-3dcf-b665-e43e4f38da05.png)

##3-2. 改行コードの指定
**Destination コンポーネント**
Destinationコンポーネントでファイル保存時の改行コードの指定が可能になりました。これにより、LFに加えて、CRLFでの保存が可能になりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/580e6a95-fd8d-d001-021b-278d2e77a2f0.png)

##3-3. エスケープキャラクターの指定
**Source/Destinationコンポーネント**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/cb81fc58-b6a2-3ba2-db65-638126086510.png)

#最後に
Xplentyのストレージ連携機能を使うことで、ストレージ<>DB間やストレージ<>SaaS間の連携をより柔軟かつ簡単に実現することが可能です。CSV、TSV、ログファイルはもちろんJSONや[**XMLファイルの連携**](https://qiita.com/Azabu10ban/items/7f77d16962f4e8a09c11)も変換を含めて柔軟に実現することが可能です。
Xplentyのストレージ連携に興味のある方は、ぜひ[**こちらのリンク**](https://try.xplenty.com/jp-demo/)からオンラインデモをお申し込みいただき、機能を確認してみてください。