【Dataiku】シナリオから自動で変数(Variables)を変更する方法

【Dataiku】シナリオから自動で変数(Variables)を変更する方法 | Tableau-id Press -タブロイド-
dataiku_logo

こんにちは、ひめのです。
前回に引き続きDataikuのシナリオ関連のTry&Error記事です。
今回はDataikuのシナリオを使って自動で変数(Variables、以下変数と呼びます)を変更してみます。

Dataikuの変数とは&想定される利用シーン

変数はフローの中で繰り返し使える、JSON形式で格納されている情報です。


画像はナレッジベースからお借りしました。
変数はDSS全体で使えるGlobalとプロジェクト内だけで使えるLocalがあり、
上部のバーの…マークからVariablesを選択すると表示できます。

変数には様々な値が入れられるので、例えば実行した時間をデータに入れると
エクスポートするときのファイル名に変数を入れる、などできます。
export_202312181630.csvみたいな名前のファイルができます。

前回Snowflakeのテーブルにデータを追加したりしていますが、
このテーブルに追加されたデータを変数に格納できると
最新のテーブルを参照して、その内容をフローの中で使えるようになるのです。

早速実装してみよう

上部のバーの△ボタンからScenarioを選択します。
[ADD STEP]から追加するステップのメニューを開きます。
Variablesの項目にも4つ候補があるのですが、いろいろ試しても上手く行かなかったので
Pythonで変数を更新します(^_^;)

上手く行かなかった理由として考えられるのは…
Define scenario variables →シナリオレベルの変数なのでLocalでもGlobalでもなく、今回対象にしてる変数じゃなかったから
Set project variables →JSON形式で指定するので、動的に情報をどこかから取ってくる用じゃなかったんじゃないか
Set DSS global variables →同上
Run global DSS variables update code →Jythonで書く必要があり、私の力量と検索力ではわからなかったです…

 

気を取り直して、Pythonコードはこんな感じです↓

import dataiku
client = dataiku.api_client()

project = client.get_project(dataiku.get_custom_variables()['projectKey']) # projectKeyのままにします

dataset = dataiku.Dataset('YOUR_DATASET').get_dataframe() # データセットの名称に変更してください
value = dataset['COL2'][0]  # ご自身のデータセットから抽出したいデータを指定してください

project_variables = project.get_variables()
project_variables['local']['YOUR_VARIABLE_NAME'] = value # 変更したい変数の名称に変更してください
project_variables = project.set_variables(project_variables)

localとするとプロジェクト内のlocal variablesに追加され、standardとするとglobal variablesになります。

SAVEで保存して、RUNで手動実行して問題なく完了するか確認します。
私が個人的に要注意かな、と思う点としては
シナリオのCode envがちゃんと指定されているか、ということと
予めVariablesのページでダミーでいいので項目として変更したい変数が定義されているか、があります。
Code envはここ以外でもよく引っかかっているので特に特殊なライブラリを使っていなくても
Select envにして手動でセットするのが個人的におすすめです。
ダミーは{"variable_to_change" : "xxx" } などとしておきましょう。

ドキュメントを読んでもわからずサポートに聞いてしまったが…

前回の記事と同様にドキュメント(このページ以外にもたくさん見まくったんですが)を
いろいろ自分で調べてもわからなかったので
サポートに聞いてしまったのですが(特にstandard かlocalを指定しないといけないところが)
仕入れた情報を元に記事を書こうと思って[Dataiku variables standard local]みたいなキーワードで検索すると
Dataiku Knowledgeというページがヒットしまして…
私が今回聞いた内容に近いことが書いてありました。
サポートの方、お手数おかけしてしまい、すみませんでした…

普段[Dataiku document XXXXX]で検索してしまっていたのですが、
(APIリファレンスも見ていたけれど)KnowledgeはGoogle検索では引っかかって来なかったので
ぜひドキュメントから関連するKnowledgeへのリンクを貼っていただきたい…
それかLLMを使ったりしてドキュメントとAPIリファレンスとKnowledgeの横断的検索ができる
ヘルプサービスが欲しいです。(Dataikuさーん、お願いしまーす)
あと逆にAPIリファレンスから使用例が載ってるドキュメントやKnowledgeへのリンクも欲しいです…

ノーコード要素も多いサービスなので私のようなコーディングがそこまでできない人間でも
Dataikuを通じて補助輪付きで学ぶ、みたいな使い方ができると思ってます。(というかやってます)
APIリファレンスを読んでばっちり書けるまでは行かなくても、例が載ってると真似ができるので
今後のドキュメントの充実に期待しつつ、
日本語の記事はやはりまだ少ないので弊社も発信を頑張りたいと思う所存です!

では、また!