Dataiku体験日記 ~Snowflakeと接続してみよう~

Dataiku体験日記 ~Snowflakeと接続してみよう~ | Tableau-id Press -タブロイド-
dataiku_logo

新しいもの大好き!deepblueのひめのです!

deepblueはTruestarの兄弟会社という位置づけで、機械学習や統計モデルを用いたソリューションを提供しています。会社紹介はこちら→deepblue HP

今回はTruestarと合同でDataikuというMLOpsプラットフォームをトライアルしてみている件をゲスト寄稿です。

はじめに

DataikuのHPはこちらです→Dataiku HP

フランス発の機械学習プラットフォームです。
2018のAlteryx Inspireに参加した際にかわいいトートバッグをノベルティとしてもらっていて、
名前だけは知っていたのですが、詳しい製品の機能は最近知りました。
Dataikuを使うとどんなことができて、どうビジネスを押し進めてくれるのかを発見していきたいと思います!

今回使用しているDataiku はCloud版です。(ローカルもあるみたいですね)

Snowflakeと接続してみよう

TruestarはPODBでデータを公開しているので、このデータをフロー(一連の処理をこう呼ぶ)に取り込みたいと思います。

Alteryx的なデータの加工ももちろんできるのですが、それはまたの機会にブログにしたいと思います。
最初にログインするとLaunch Padという画面に行くので、早速接続の設定をします。

[+ ADD A CONNECTION]を押します。
Read/WriteからSnowflakeを選択します。


ここからじわじわと苦戦しました。苦戦した内容は最後にまとめます。

Snowflakeでデータベースを用意しよう

ちょっと逸れて、先にSnowflakeでデータベースの用意をします。

Roleを用意する

本当はちゃんと制限しないといけないと思うのですが、
いろいろ権限が足りない、というエラーに直面した結果、このような新しいRoleが作成されました。
トライアルなのでご容赦ください…

コネクション用のデータベース・テーブルを用意する

次に新しく作成したRoleでデータベースを作成します。

CREATE OR REPLACE DATABASE dataiku_test
USE DATABASE dataiku_test;
create table mytable (amount number);

ワークシートで実行して、新しくデータベースと、その中にテーブルができていることを確認します。

接続するホストを確認する

こちらの公式ドキュメントを参考に、ホスト名を確認します。

SYSTEM$ALLOWLIST()

これをデータベース作成時と同様にワークシートで実行します。
結果が返ってきます。長いですが、恐らく最初の行に注目すれば足ります。

{“type”:”SNOWFLAKE_DEPLOYMENT”,”host”:”xxxxxxxxx.snowflakecomputing.com”,”port”:xxx}

"host": "xxxxxx.snowflakecomputing.com"のxxxxxx.snowflakecomputing.comがこの後必要になるのでメモしておきます。

いざ、Connectionを設定しよう

各種項目を入力する

  • Name→お好きに入力
  • Host→先ほどメモしたxxxxxx
  • Credentials Mode→Global(他の選択肢としてper userがありますが、これしか試してません)
  • Authentication Mode→ User & Password (これしか試してません)
  • User→ Snowflakeのユーザー名
  • Password→ Snowflakeのパスワード
  • Role→ 先ほど作成したRoleを入力
  • Database→ 先ほど作成したデータベース名
  • Schema→ 何も設定していないのでPublicと入力
  • Warehouse→ 使用するWarehouseを入力
  • Stage→ 先ほど作成したテーブル名をそのまま使います。今回はmytableにしました↑。

たまに読み込み中みたいな画面になって、プルダウンから選択できるみたいなのですが、
どういう場合に発生するのかわかりません…
あるはずなのに候補で出ないこともあるので、直接打ち込みのが確実です。
入力終わったら「Next」ボタン押します。

SQLを実行する

次のページでSQL文が表示されるので、右上にあるコピーボタンを押します。
Snowflakeの画面に戻って、ワークシートで実行します。

Statement executed sucessfully.

と表示されたら完了です!
Dataikuの画面に戻って、「Test&Save」ボタンを押します。

フローから呼び出してみよう

Dataset > +New Dataset > Search and Import で進みます。
先ほどNameに入力したコネクションを指定します。

「List Tables」を押します。すると候補のテーブルが出てくるので、ここからフローに取り込めます!

苦戦した箇所

RoleはAccount Adminではいけない

コネクションの設定でRoleと言われたのでトライアル環境ならなんでもいいや、とAccount Adminを指定してみました。
でもAccount AdminはAccount Adminなので、権限追加とかができない関係で使えないみたいです。
ということでカスタムなRoleを指定する必要がありそうです。

Stageだけど@や%はいらない

コネクションでstageを指定しますが、テーブルを作成しただけでstageは無いので@や%を頭につけてみたりしたのですが、結果的に無い方がうまく行きました。
私はsnowflake初心者なのであまり気にならないのですが、助けてくれた詳しい先輩によると通常のsnowflakeの仕組みとちょっと違うそうです。

Read-onlyのテーブルを指定してコネクションが作れない

Read-onlyとRead/Writeを選択する箇所があるので両方試しましたが、Snowflake上にあるRead-onlyのデータベースを指定するとコネクションが作成できませんでした。

Truestarで提供しているPODBデータをクローンしたデータベースを入れたトライアルSnowflakeを作成していて、今回はその中に新しいダミーのようなデータベースを入れていたのですが、このデータベースではコネクションができず…

コネクションで設定した以外のテーブルが読める!?

コネクションを作成するのを諦めて、とりあえず接続してみたかったので自分でデータベースを作成しました。
諦めきれていないときに権限周りをいじって、作成した新RoleにPODBのクローンの権限を追加したりしていました。
その後、コネクションがめでたく完成し、フローから読み込もうとしたら…

別データベースもなぜか見えるんですが(;’∀’)
新しく作成したRoleの権限で見られるデータベース、スキーマ、テーブルがすべてフローから読み込めます。

書き込みも試してみましたが、Read-onlyのデータベースにはもちろん書き込めません。
でもコネクションで指定した以外のデータベースで権限的にOKなものには書き込めました。

まとめ

Dataiku、Snowflakeどちらも初心者ですがデータの接続をやってみました!

参考になれば幸いです!