出力データセット名の動的な変更について

現在Pythonレシピを用いて出力するデータセット名に出力日時を加えたいと考えています。
Pythonレシピで出力データセット名に付けたいデータセット名を指定したところ、
<class 'Exception'>: Dataset "データセット名" cannot be used : declare it as input or output of your recipe
というエラーが出ます。
Pythonレシピの入出力で設定したデータセット名のみが利用できないという旨ではあると思うのですが、どうにかして出力データセット名を動的に変更することはできないでしょうか。
Best Answer
-
少し無理やりなやり方で、意向に沿う形ではないかもしれませんが以下の方法では可能です。
- レシピ内で動的な名前のデータセットを作成
DataikuのPython APIを使用して、新しいデータセットを動的に作成できます。ただし、この場合、ignore_flow=Trueオプションを使用してフローのチェックを無効化する必要があります。 - 出力先として「マネージドフォルダ」を使用
Dataikuでは、マネージドフォルダを利用して動的なファイル名でデータを書き出すことが可能です。Pythonスクリプト内でファイル名にタイムスタンプやその他の情報を追加できます。 - レシピの入出力設定に「ダミー」データセットを指定
Pythonレシピは必ず出力データセットが必要ですが、動的な名前で処理したい場合は「ダミー」の出力データセットを設定し、実際の処理はAPIやマネージドフォルダで行う方法もあります。
注意点
動的に作成したデータセットやファイルは、Dataikuフロー上では明示的に表示されません。そのため、後続の処理で利用する場合は注意が必要です。
Dataiku内でフロー全体の整合性を保つためには、可能な限り事前に定義された入出力設定を利用することが推奨されます。おそらく後続の処理での利用も想定された上で動的に名前をつけるのだと思いますが、参考までに。
- レシピ内で動的な名前のデータセットを作成
Answers
-
Tsuyoshi Dataiker, PartnerAdmin, Dataiku DSS Core Designer, Dataiku DSS ML Practitioner, Dataiku DSS Adv Designer, Registered Posts: 166 Dataiker
上記、@tomob さんの回答「1」にヒントを得て、私の環境でも確認してみました。その結果、以下のAPIを利用することで、コードレシピの処理の一番最後にデータセット名を変更することは可能そうな感じでした。
上記APIはDataikuのAdmin APIパッケージを利用するため、Dataiku Cloudでは利用不可ですが、セルフマネージド(インストール版)の場合には利用可能と考えられます。
@tomoyoshi さん、もしこちらの方法が使えそうでしたら(既存データセットの名前を変更する方法なので、実現したいこととは合わないかもしれませんが)、こちらもお試しいただければと思います。使い方としては、以下のようなイメージです。
oldname = "a"
newname = "b"
dataiku.api_client().get_project("TEST1").get_dataset(oldname).rename(newname)