Python レシピでの「RELOAD SCHEMA FROM TABLE」相当のスキーマの再作成について

「RELOAD SCHEMA FROM TABLE」で行われている操作を、Python レシピで実現する方法を模索しています。以下に、具体的な要件を説明します。
Python レシピの Output 先として PostgreSQL 上のテーブルを指定し、以下の動作を実現したいと考えています。
・Python レシピ内のコードでは、データの書き込みは実施しない。
・その代わり、Python レシピ内のコードからリモート実行するスクリプトが、Output先として指定されているテーブルをDB上に作成し、値を書き込む。
この場合、Flow 上で Output 先となっているデータセットを参照すると「Invalid argument」が表示されますが、「Settings」タブの「RELOAD SCHEMA FROM TABLE」をクリックすることで、PostgreSQL 上のテーブル定義に基づき、スキーマが再作成されるかと思います。
この、『人手による「RELOAD SCHEMA FROM TABLE」をクリック』を行わずに、Python レシピでのPythonスクリプトにてPostgreSQL 上のテーブル定義で自動で反映し、スキーマを再作成するための手法があれば、教えていただきたいです。
Best Answer
-
Tsuyoshi Dataiker, PartnerAdmin, Dataiku DSS Core Designer, Dataiku DSS ML Practitioner, Dataiku DSS Adv Designer, Registered Posts: 200 Dataiker
シナリオ自体をプラグインに含めることはできないため、今回のケースですと、「シナリオはあらかじめ利用者に作成してもらい、プラグインの中のPythonコードでは、そのシナリオを起動する」方法をとっていただくことになるかなと思います。
その場合、シナリオ名の文字列もしくはシナリオオブジェクト自体をプラグインのパラメータに利用することは可能ですので、運用に少し考慮が必要になるとは思いますが、このあたりの方法をうまく使っていただくことになるかなと考えております。
参考:Dataikuプラグイン開発チュートリアル
参考:プラグインで指定可能なパラメータの種類
Answers
-
Tsuyoshi Dataiker, PartnerAdmin, Dataiku DSS Core Designer, Dataiku DSS ML Practitioner, Dataiku DSS Adv Designer, Registered Posts: 200 Dataiker
Pythonレシピ内では、出力データセットに対するAPI経由のスキーマ変更は不可と考えられます。(一方、入力データセットに対するAPI経由のスキーマ変更は可能なはずです。)
そこで、対応方法としましては、シナリオ機能で「スキーマを再読み込み(Reload schema)」ステップを定義し、そのシナリオをPythonレシピ内で実行する案が考えられます。
上記のように定義したシナリオを、コードレシピの中で以下のように API経由で実行します。
import dataiku
#定義しておいたシナリオをシナリオIDを指定して実行
scenario = dataiku.api_client().get_default_project().get_scenario("schema_update")
scenario.run_and_wait()上記のような方法にて、今回想定されている処理を実現できそうでしょうか?
-
回答いただきありがとうございます。
教えて頂いた方法を試したところ、意図した動作になりました。
ありがとうございます。今回作成したPythonレシピを、今後プラグイン化するということも考えております。
そうなった場合、
・シナリオもプラグインに含めることができるのでしょうか
・(プラグインに含めることができる場合)
リロード対象のデータセットを、プラグインのOutputに指定されているデータセットに動的に指定することはできるのでしょうか?もし、シナリオをプラグインに含められない場合、シナリオはあらかじめ利用者に作成してもらい、
プラグインの中のPythonコードでは、そのシナリオを起動するというやり方ができるのではと考えています。
(シナリオ名は決め打ちにするか、プラグインのパラメータとして入力してもらう等のやり方でできると考えています。) -
回答いただきありがとうございます。
提案いただいた方法で、検証を進めていきたいと思います。