ZIP Archive and Dataset Fanout

ZIPアーカイブと Dataset Fanout (データセット・ファンアウト)

FME 2014 SP3 build 14391

There are many files in a directory; the files are grouped by the prefix of those names.
a_01.ext, a_02.ext, a_03.ext, ...
b_01.ext, b_02.ext, b_03.ext, ...
c_01.ext, c_02.ext, c_03.ext, ...
and so on.

I needed to archive them with zip-compression for each group. The required output is:
a.zip, b.zip, c.zip ...

At first, I thought it can be realized easily with the Directory and File Pathnames reader [PATH], some Transformers, and the File Copy writer [FILECOPY] with Dataset Fanout, like this.
はじめは、次のように Directory and File Pathnames リーダー [PATH]、いくつかのトランスフォーマー、および、データセット・ファンアウトを使用した File Copy ライター [FILCOPY] によって簡単に実現できるだろうと考えました。

The workspace was able to compress the source files, but didn't fanout. Just one zip file which has archived every file was created as the result. This may be a limitation of the current FME.
2014-10-11: I found this description in FME Workbench documentation.
"Note: You cannot create multiple zip files using Dataset Fanout (therefore, you cannot set the Fanout Suffix parameter to .zip)."
Yes, that's indeed a limitation of the current FME.
FME Woekbench のドキュメントで次のような説明をみつけました。
「注: データセット・ファンアウトを使用して複数のzipファイルを作成することはできません(したがって Fanout Suffix パラメーターに .zip を設定することはできません)」
2015-11-24: FME 2016.0 beta build 16133
In FME 2016, the ability to create multiple zip files will be added to the Dataset Fanout. See here.
FME 2016 では、データセットファンアウトに複数の zip ファイルを作成する機能が追加されます。ここを参照してください。

The first approach failed, unfortunately.
But don't give up. The WorkspaceRunner would be a workaround in the interim.
しかし、あきらめることはありません。WorkspaceRunner が当面の回避策になります。

The main workspace is simple. It just copies every file to a directory from the source directory. The only point is that it publishes the "Path Filter" parameter of the PATH reader.
メインワークスペースは単純で、全てのファイルをソースディレクトリから他のディレクトリにコピーするだけです。唯一のポイントは、PATH リーダーの"Path Filter"パラメーターを公開していることです。

Then, create another workspace with a WorkspaceRunner to run the main workspace for each prefix. The data flow contains these transformers.
1) AttributeSplitter, AttributeRenamer: extract prefix from every file name, store it as attribute named "_prefix". The renaming is not essential since "_list{0}" can be used instead of "_prefix".
2) DuplicateRemover: remove duplicate prefixes.
3) StringConcatenator: create a preferable zip file path string based on the specified output directory path and the extracted prefix. i.e. "<directory path>\<prefix>.zip"
そして、そのメインワークスペースをプレフィクスごとに実行するために、WorkspaceRunner を含むもうひとつのワークスペースを作成します。データフローには以下のトランスフォーマーが含まれます。
1) AttributeSplitter, AttributeRenamer: 全てのファイル名からプレフィクスを抽出し、"_prefix"という属性に格納します。"_list{0}"が"_prefix"の代わりに使えるので属性名の変更は必須ではありません。
2) DuplicateRemover: 重複したプレフィクスを削除します。
3) StringConcatenator: 出力先のディレクトリパスと抽出されたプレフィクスに基づいて、適切なzipファイルパス"<directory path>\<prefix>.zip"を作成します。

Finally, pass the source directory path, a path filter (i.e. "<prefix>_*"), and the zip file path to the main workspace through the WorkspaceRunner.
最後に、WorkspaceRunner 経由でソースディレクトリのパス、パス・フィルター("<prefix>_*")、および zipファイルパスをメインワークスペースに渡します。

It worked fine as expected. But I believe that the first approach - the Dataset Fanout will be available in the near future.
これは期待した通りに動作しました。しかし、最初のアプローチ - データセット・ファンアウトも、近い将来には利用可能になると思います。
2015-11-24: FME 2016.0 beta build 16133
In FME 2016, you can create multiple zip files using Dataset Fanout. See here.
FME 2016 では、データセットファンアウトで複数の zip ファイルが作成できます。ここを参照してください。

No comments:

Post a Comment