Alteryxでデータベースに出力する際のOutput Optionsごとの挙動
こんにちは、小澤です。
AlteryxでOutput Dataツールを使ってデータベースに出力する際に、「Output Options」という項目があります。
今回は、これらの設定を行った際の挙動について見ていきたいと思います。
Create New Table
まずは、デフォルトである「Create New Table」を選択したときの動きを見てみます。
Create New Tableを選択して、ワークフローを実行すると新規でテーブルが作成されます。 テーブルを作成する際のデータの型などは、Alteryx内でのデータの型から設定されるようです。
例えば、CSVファイルをそのまま出力すると、Alteryx上で文字列として扱われるので、テーブル定義ではすべてvarcharとなりますが、 Auto Fieldを使ってからから出力すると、テーブル定義上でも適切な型が設定されます。
それぞれの方法で出力したデータをAlteryxから読み込んでField Infoツールで型を確認すると以下のようになります。 (上 : CSVをそのまま出力、下 : Auto Fieldツールを使ってから出力)
Create New Table、存在しないテーブルであれば問題なく作成可能です。 しかし、既にあるテーブルを指定した場合、エラーとなります。
そのため、同じワークフローを2回実行すると2回目は必ずエラーになります。
Append Existing
Append Existingを選択すると、既存のテーブルにデータが追記されます。 そのため、同じデータに対して同じワークフローを2回実行すると、同じデータが2つ挿入されることになります。
また、以下の場合はエラーになります。
- テーブルが存在しない
- 既存のデータにたいして主キーなどの一意制約に違反するデータが存在する
- 必須レコードが存在しない
Delete Data & Append
Delete Data & Appendを選択すると、既存のテーブルに対してデータを全件削除したのち、データの挿入を行います。
実行時に既存のデータを一度すべて削除しますので、問題がある場合は注意が必要です。 Alteryxを使ったワークフローでデータを全件洗い替えするような時に利用できます。
Overwrite Table(Drop)
Overwrite Table(Drop)はDelete Data & Appendと似たような動きになります。
Overwrite Table(Drop)では、テーブルそのものを削除して作り直します。 テーブルの削除はdrop table if exists(存在する場合は削除する)扱いなので、存在しないテーブルを対象にしてもエラーとはなりません。
ただし、Create New Tableの時と同様、作成されるテーブルのスキーマは出力対象となるデータに基づいて決定されるので既存のテーブルのスキーマと同じになる保証はありません。
Update
Update: Warn on Update Failure, Update: Error on Update Failure, Update: Insert if Newの3つは、既存のデータを上書きするものになります。
上書きを行う際には「どのレコードが上書き対象か」が明確である必要があります。 これらのUpdate系では、主キーが同一のものが上書き対象として、認識されます。 そのため、対象となるテーブルには主キーが設定されている必要があります。
主キーの無いテーブルに対して、Updateを行うと以下のようなエラーが発生します。
Update系の3つそれぞれの違いとして、既存のデータには含まれないレコードがあった場合の動作が異なります。
Output Option | 動作 |
---|---|
Warn on Update Failure | 存在しないレコードをUpdateしようとした警告メッセージが出力され、可能なものはUpdateされる |
Error on Update Failure | その場でエラーとなり、Update可能なレコードも処理されない |
Insert if New | 新規レコードとして挿入される。いわゆるupsert相当の処理 |
おわりに
今回は、Output Dataツールを利用して、データベースに出力を行う際のOutput Optionsごとの挙動の違いを見ていきました。
実際の用途でどれが適切かは状況によって異なるため、「必ずこれを選んでおけばいい」というものはりません。 多くの選択肢が用意されているので、適切なものを使い分けるようにしてください。