Alteryxで出力ファイルをZIPファイルに圧縮する方法
Alteryxは標準で出力ファイルをZIP形式にまとめる機能がありません。基本的にはコマンド実行ツールを使って外部ツールで機能を実現することになりますが、今回は7zipなどの外部のソフトウェアではなくWindowsの機能を使って圧縮する方法をご紹介します。
WindowsでZIP圧縮する方法
Windows7以降のWindowsにはPowerShellという環境が標準で搭載されています。これは一種のプログラミング言語(スクリプト言語)なのですが、コマンドラインインターフェースを持っているため、cmd.exeと同じように使うことが可能です。
そしてこのPowerShellに搭載されている機能の一つが、「Compress-Archive」コマンドです。これはまさにZip形式のファイルに圧縮する機能を持っています。
まず、実際にPowerShellで試してみましょう。Windowsの検索ボックスで「PowerShell」と打ち込むと以下のようにPowerShellが結果として表示されます。
起動すると以下のようなCLIが起動します(伝統的な黒ではなく青色なんですよね・・・)。ちなみに、cmd.exeからPowerShellと入力して起動してもPowerShellのCLIにそのまま移行可能です。
ここから圧縮したいファイルがあるフォルダに移動します(CDコマンドで移動します)。
ここでCompress-Archiveのコマンドを入力します。
これにより、このカレントフォルダ配下にあるzipというフォルダ内のファイルをすべてoutput.zipというファイル名でカレントフォルダに出力します(-Forceオプションを付加しているのですでに同名のファイルがある場合でも上書き出力します)。
圧縮は以下のような感じで行われます。
Alteryx Designerでやってみる
それではDesignerでワークフローを作ってみましょう。一番簡単な方法は、コマンド実行ツールを使う方法です。
まず前提として、ファイル・フォルダ構成はこのような感じになります(zipフォルダはあらかじめ作成しておく必要があります)。
イメージとしては以下のようなワークフローになります。もちろん、各データ出力ツール、レンダリングツールはzipフォルダに保存するような設定にする必要があります。
なお、ここでのポイントは、完了までブロックツールとレコードカウントツールです。
上の図の赤い部分の処理が完了しないとレコードカウントできないため、必ず赤い部分が完了してからコマンドラインツールが動作します。このとき、「完了までブロックツール」でファイル保存後にユニオンツールにデータが渡されるようにしています(「完了までブロックツール」を入れなくても概ね動作するケースが多いのですが、複雑なケースでは実行順序が想定と異なることがあるため、念の為「完了までブロックツール」は入れてください)。
ちなみに、テーブルツールから直接ユニオンに接続していますが、無駄にメモリを使うので、間にレコードカウントツールを挟んだほうがメモリ消費量を抑えることができます。
次に、コマンド実行ツールの設定を見ていきましょう(ここが今回の本丸です)。ポイントは赤枠の3箇所です。
- ソースの書き込み
- ダミー用の出力なので適当に設定してください(何でもいいですが、おすすめはyxdb形式です)
- 外部プログラムを実行
- 「PowerShell」と記載します
- コマンド実行(引数)
- 「compress-archive -Force zip output」と記載していますが、赤文字部分のzip、output部分は実際の実行環境に合わせて記載する必要があります
これで実行すれば、以下のように出力されます。
赤文字部分が出力結果ですが、dummy.yxdbは不要なファイルで、欲しいのは「output.zip」です。
圧縮後に圧縮元のファイルを削除するには?
さて、ZIPフォルダに出力したファイルは不要なファイルかと思います。中身を確認することは大切ではありますが、メールなどでZIPファイルを送るのであれば、送られたものを見れば十分かもしれません。そのような場合、ZIPフォルダ内のファイルはやはり不要という判断になるかと思います。
このような場合ZIPフォルダ内のファイルを消したいということになるかと思います。このような場合、さらにコマンド実行ツールの後ろにコマンド実行ツールを接続し、Delコマンドを発行する形になります。
この場合、もともとあったPowerShellを起動するコマンド実行ツールにも設定変更が必要です。
こちらのように、コマンド実行ツールの後段にツールを接続する場合は、結果の読み取りの指定が必要になります。今回は、コマンド実行ツールで書き出したファイルをそのまま読み込みましょう。
その後、さらにファイル削除用のコマンド実行ツールを接続します。
- ソースの書き込み
- ダミー用の出力なので適当に設定してください。前段のコマンド実行ツールと同じファイル名にするとうまく動かないので適当に変更しましょう。
- 外部プログラムを実行
- 「cmd.exe」と記載します
- コマンド実行(引数)
- 「/C del /Q zip\」と記載していますが、赤文字部分のzip部分は実際の実行環境に合わせて記載する必要があります。なお、頭の「/C」がないとコマンドが発行されません。心配な方は、赤文字部分はフルパスで記載しましょう。
なお、ファイル削除は意図しないファイルを削除することがないように、最大限の注意を払って実行願います。
また、ファイルを移動したりなどコマンド実行ツールでやる作業が多い場合はバッチファイルを利用した方法を推奨します。
関連記事
バッチファイルを生成して実行する方法
イベントを利用する方法
まとめ
- Windows標準のPowerShellを使ってZip圧縮する方法をご紹介しました
- 圧縮後に不要になった圧縮前のファイルを削除する方法をご紹介しました
参考
Microsoft Compress-Archiveドキュメント fa-external-link
サンプルワークフローダウンロード
SampleWF_PSで圧縮 fa-download
※Alteryx Designer バージョン2021.4.1.04899時点の情報です