Xplenty入門 Part4: Destinationの設定

こんにちは。今回はDestinationコンポーネントの設定、つまりデータのロード対象となる**送信先**のデータベースやストレージに関する設定について解説したいと思います。

まずDestinationコンポーネントには複数の種類があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/fc6f0238-1db5-03c7-afb8-6344cd2e037d.png)

上記のDestinationの一覧にあるディスティネーション以外にもCurlでのデータ書き込みをサポートしています。そちらについては、別のブログ「[Xplenty : Curl Functionを使ったデータ更新 （デモ動画あり）](https://qiita.com/Azabu10ban/items/b0b188c9f4c497dee617)」で解説してますのでチェックしてみてください。

今回はDestinationコンポーネントの中でもAmazon RedshiftやBigQueryのような特定のDestinationに保存するものもありますが、DatabaseやStorageのように、さらにDestinationの対象を設定するものがあります。そこで、DatabaseとStorageについて詳しく見ていきましょう。

#1. Databaseコンポーネント
この中でDatabaseを選択した場合は、さらに以下のリストからお好みのデータベースを選択可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/b5e8d3c5-9edc-fb69-ffb5-41628d906057.png)

###データの更新方法が豊富
また、設定の詳細では、更新方法については、**追加のみ**、**上書き更新**、**差分更新**といったきめ細かいオプションを設定可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/19208a81-6095-be52-aa0a-ca077b3de70e.png)

###処理前と処理後にSQLを実行することが可能
Pre-action SQLとPost-action SQLでは、データをデータベースに書き込む直前もしくは直後のSQL処理を設定することが可能です。

この機能を使うことで、事前にテーブルを作成したり、あるテーブルを更新した後に、更新されたデータをもとに別のテーブルへデータを書き込んだりするのに利用することが可能です。


#2. File Storageコンポーネント
File storageを選択した場合も同様に、以下のリストからお好みのストレージが選択可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/7984299e-4b11-ddbe-f4a4-2fb7ed8d5a0e.png)

**保存時のオプションは以下の４つがあります**

- **Write all files directly and fail the job if target directory already exists**
ファイルはターゲットディレクトリに直接書き込まれます。デフォルトでは、ターゲットディレクトリが既に存在する場合、ジョブは失敗します。変数を使用して、ジョブが実行されるたびに新しいディレクトリ名を動的に生成することができます (例: /output/${_JOB_ID})。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/c4e76c52-89b0-ccb0-ffa3-53fe8a18a29e.png)

- **Write all files directly and delete target directory if already exists**
ファイルはターゲットディレクトリに直接書き込まれます。
**注意：** <font color="blue">実行時に、対象ディレクトリが存在するかどうかを確認し、存在する場合は、対象ディレクトリを削除します。</font>

- **Write all files directly and replace files in directory if they already exist**
対象ディレクトリに直接ファイルを書き込みます。このオプションを選択した場合、実行先のディレクトリが存在していてもジョブは失敗せず、既存のディレクトリにファイルが書き込まれます。同名のファイルがディレクトリ内に存在する場合は上書きされます。ディレクトリにファイルを追加したい場合は、ジョブ実行毎に固有のファイルパターンを使用するように変更してください（例：ファイルのプレフィックスに変数${_JOB_ID}を使用する（下記参照））。
**注意：** <font color="blue">対象ディレクトリはジョブ失敗時に削除されます。</font>
- **Use intermediate storage and copy files to an existing directory in destination**
ファイルは中間ストレージに書き込まれた後、コピー先のディレクトリにコピーされます。
**注意：** <font color="blue">このオプションを利用する場合、ターゲットディレクトリが存在することを確認してください。ディレクトリがない場合はエラーとなります。</font>


##ヒント: ストレージ保存時のファイル名の指定について
Xplentyでファイルを出力時に、以下のように自動的に番号が付与される仕組みになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/53554334-04ae-9fca-3102-c0c5930492e2.png)

このファイル名に自動的に付与される番号を回避し、希望通りにファイル名を設定する方法は以下の通りです。

1.File storageコンポーネントの設定画面にある「**Destination action**」で「**Use intermediate storage and copy files to an existing directory in destination**」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/b0c4865b-a2ba-3570-d2ba-31b07dccbbfc.png)

2.フォルダパス側の指定に保存したいファイル名を含めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/77fe1fc1-5582-7675-929d-4c8ee9801ea0.png)

3.意図したファイル名で指定したストレージのパスに出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/b1791fb9-c34f-20d6-feb5-17c626c7a71c.png)

##File Storageコンポーネント：その他のTips
- ストレージを選択した場合、柔軟にファイルを保存するためのオプションが多く用意されています。詳細は「[ストレージサービス連携機能 : Shift-JISにも対応](https://www.xplenty.com/jp/blog/xplenty-storage-ja/)」で解説しています。 


- Merge output to single file
宛先ディレクトリに単一のファイルのみが書き込まれることを確認してください。特定のプラットフォームでのファイルサイズの制限は、ジョブに失敗する可能性があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/04f4f18b-b15e-ccf7-c158-2e37c1c96fcb.png)