DataikuとSnowflakeを連携しようとしたけど上手くできなかった話 – Snowflake Advent Calendar 2019 #SnowflakeDB

Snowflakeのドライバを入れるところについては参考になるはず…
2019.12.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

どうも。大阪オフィスの玉井です。

当エントリは『Snowflake Advent Calendar 2019』の14日目のエントリです。

今回はDataikuというデータ分析(特に機械学習)のプラットフォームサービス製品とSnowflakeを連携させてみようとしたが、上手くいかなかった話をまとめたいと思います。

作業環境

DataikuとSnowflakeの関係

DataikuはSnowflakeのすべての機能をサポートしています。

  • データセットの読み取りと書き込み
  • SQLレシピの実行
  • データベース内でビジュアルレシピを実行する
  • チャートにライブエンジンを使用する

やってみた

SnowflakeのJDBC driverをインストールする

ドライバのダウンロード

下記を参考にダウンロードします。

このドキュメントに記載されているリンクからドライバ一覧がダウンロードできるページに飛べるので、そこから最新バージョンをダウンロードします。

ドライバをDataikuのディレクトリに配置する

上記で取得したドライバは、Dataiku(のインスタンス)の下記ディレクトリに配置します(UNIX弱者のわたしはWinSCPを使いました)。

/home/dataiku/dss/lib/jdbc

ドライバの配置を終えたら、Dataikuを再起動します。ここで気をつけたいのは、インスタンスを再起動してもダメで、別途インスタンスに接続して、専用のコマンドでDataiku自身の再起動が必要になります。公式ではDATA_DIR/bin/dss stopDATA_DIR/bin/dss startというコマンドが紹介されているのですが、このDATA_DIRは環境によって変わるようです。今回のDataikuはAWSマーケットプレイスから構築したものですが、その場合は下記の通りでコマンドが通りました。

/home/dataiku/dss/bin/dss stop
/home/dataiku/dss/bin/dss start

ConnectionにSnowflakeを追加する

JDBCドライバのインストール(配置)が終わったところで、Snowflakeの接続情報をDataikuに入力します。メニューのAdministrationを選び、Connectionの画面に移動します。

Snowflakeの接続情報の入力画面に遷移できるので、ここに接続したいSnowflakeの情報を入れます。

下記のように入力しました。Hostは~snowflakecomputing.comまで入れましょう。https://は入れても入れなくても、どっちでも大丈夫です。

他にも色々なオプション事項等がありますが、今回は最低限で行きたいと思います。上記の部分の入力を終えると、画面下記でテスト接続ができます。問題なければConnectionが問題ないことが表示され、その接続情報をCREATEできます。

Snowflakeのテーブルをデータソースにしたい…のだが…

「SnowflakeとDataikuの接続が問題なく出来たから、後はデータソースにするテーブルを選ぶだけだな」ということで、作業を続けました。

テスト用のブランクプロジェクトを作ります。

IMPORT YOUR FIRST DATASETを選んで、Snowflakeのデータを選んでいきます。ちなみに、プロジェクトのデータソースにSnowflakeを選ぶためにはEnterprise Editionじゃないとダメなので気をつけましょう。

Snowflakeを選んだら、後は先程設定した接続情報に基づくテーブルを選ぶだけ…と思っていたのですが、ちょっと謎な事象が起こりました。

今回設定したSnowflakeのDBは下記です。テーブルは3つしかありません。

しかし、Dataikuのテーブルを選ぶ画面では、他のDBのテーブルも一気に持ってきているように見えます。

これはDataiku側の仕様っぽくて、テーブルリストを読み込む時の注意画面でその旨が書かれていました。

全テーブル出るのはさておき、とりあえず設定した権限で見ることができるテーブルを選択するのですが、なぜかアウト。

「このセッションには現在のデータベースがありません」と言われるのですが、そもそも設定した接続情報にDB名をキッチリ入力してテスト接続も上手くいっているので、なかなか謎です。一応、カスタムSQLでUSE DATABASEを試したりしましたが、やはりエラーとなりました。

別の登録方法を試す

先程はプロジェクト画面からデータセットを登録する方法をやりましたが、今度はConnection情報から先にデータセットを指定する形をやってみます。

Connection画面の下に、テーブルをインポートするメニューへのリンクがあります。

ConnectionとSchemaを選ぶ画面になります。ここで指定した情報に基づくテーブル一覧を表示して、インポートしたいテーブルを選ぶ形となります。

ちなみに相変わらず事前設定したDBを無視して全スキーマが登場します。

テーブル一覧画面でインポートしたいテーブルを選びます。

インポートしたテーブルをデータセットとして登録するプロジェクトを選び、いざインポートを開始すると、「カラム名がダブっている」というエラーになります。

上記でインポートを試みたテーブルのカラムをSnowflake側でチェックしますが、ダブってなんかいませんでした。

なぜかこの「カラムがダブっている」というエラー、どのテーブルでも発生します。何か設定が間違っているのだとは思うのですが、このブログはアドベントカレンダー…投稿までの時間の制約があるため、これ以上の調査は一旦中断…ここまで失敗談をブログとさせていただきます…。

おわりに

SnowflakeとDataikuはテクノロジーパートナーです。

ですので、今回の接続できなかった件については、十中八九、何かの設定漏れと思われます。

実際、DataikuとSnowflakeを連携させることで、DWH側を柔軟にスケールアップorスケールアウトさせて、Dataikuで機械学習を思う存分活用できるようになるため、非常にモダンなデータサイエンス環境として使えると思います。

こちらは、年明けにでももう少し調査して、続報エントリを書きたいところです。

明日15日目は八幡豊による「Golang用のSnowflake Driverを使ってSnowflakeに接続&クエリを実行する」の予定です。お楽しみに。