はじめに
Livebook Launch Week 2 を自分でやってみるシリーズ
- Day1: Smart Cell からのリモート接続
- Day2: Whisper による音声認識の新機能
- Day3: ファイルをドラッグ&ドロップすると、扱うためのコードを自動生成する
- Day4:
- データクラウド Snowflake に接続する <- ここ
- Microsoft SQL Server に接続する
- Day5: Vim と Emacs のキーバインド
Day 4 はデータベースとの統合です
今までも PostgreSQL や MySQL などには接続できていましたが、 Snowflake と SQL Server にも接続できるようになっています
本記事では Livebook 上で KinoDB を利用し、 Snowflake への接続、 SQL 実行をやってみます
PostgreSQL への接続、 SQL 実行についてはこちら
実装したノートブックはこちら
Snowflake とは
Snowflake は データクラウド です
詳細な説明は公式サイト等を見てもらうとして、私も今回初めて触れてみたのですが、ざっくりした印象を書いておきます
今までのクラウドデータベースは、あくまでも既存のデータベースをクラウドに持って行った、というものでした
それに対して、 Snowflake はクラウドであることを前提として、 クラウドを使った理想的なデータの集積、整理、保護、処理、出力を一つのプラットフォームにまとめたもの になっています
まさにクラウドネイティブなサービスで、インフラとして AWS や GCP 、 Azure の三大クラウドを選択できたり、当然それらとの連携がしっかり準備されています
個別にデータレイク、データウェアハウス、データマート用のデータベースシステムを構築して連携させる必要がなく、 Snowflake だけで完結できるのも便利です
Snowflake の準備
まだ Snowflake のアカウントを持っていない場合、 30 日間の無料トライアルが使えるので、まずはサインアップしましょう
手順に従って進んで、最後に登録したメールアドレスに届いたメールからサインアップを完了すると、自分のアカウントのワークシート一覧が表示されます
無料トライアルではサンプルデータベースがすでに作成されているので、今回はこれを利用していきます
Livebook の準備
いつもは以下のリポジトリーで自分用に作っている Docker コンテナで Livebook を起動しているのですが、今回はコンテナからでは上手くいきませんでした
Livebook コンテナの OS が Debian 11 (bulls eye) になっているのですが、その環境上で Snowflake に接続するための ADBC が動作できませんでした
(発生したエラーを元に色々試したのですが、次から次へと不足しているパッケージが判明し、さらにそれらのパッケージを Debian 11 に入れることが困難で諦めました)
そのため、今回は macOS 上で直接 Livebook を起動しました
Livebook の README にある通り、 Elixir と Erlang のある環境下でコマンドを実行します
git clone https://github.com/livebook-dev/livebook.git
cd livebook
mix deps.get --only prod
MIX_ENV=prod mix phx.server
セットアップ
Livebook で新しいノートブックを開きます
セットアップセルに以下のコードを入力して実行しましょう
Mix.install([
{:kino_db, "~> 0.2"},
{:kino_explorer, "~> 0.1"},
{:adbc, "~> 0.2"}
])
ADBC = Arrow Database Connectivity は Snowflake 以外にも様々なデータベースとのインタフェースを提供してくれます
DB への接続
Smart Cell の Database connection を追加します
すると、以下のような入力フォームが表示されます
Snowflake の画面左下をクリックすると、アカウント情報が表示されるので、ここの情報を元に入力してください
User name は左側中段に表示されているものを小文字にして入力します
Account は右側上段のリンクアイコンをクリックし、アカウント URL をコピーして入力します
ただし、先頭の https://
(プロトコル)は削除し、ホスト名だけを指定してください
Snowflake の画面左メニューで Data をクリックすると、データベースの一覧が表示されます
今回はサンプルデータベースを使用して、以下のように入力します
- Database: snowflake_sample_data
- Schema: tpch_sf1
Password は Snowflake へのサインイン時に使用するものを入力してください
全て入力したら Smart Cell の左上 Evaluate をクリックします
結果が {:ok, #PID<0.1494.0>}
のようになれば接続できています
SQL の実行
Smart Cell で SQL query を追加します
以下のようなフォームが表示されるので、 SQL を変更して左上 Evaluate をクリックします
SELECT * FROM lineitem
結果は以下のようにデータテーブルで表示され、自動的に列毎の基本統計量など(最小値、最大値、平均、欠損値数)も算出されています
まとめ
KinoDB を使うことで、簡単に Livebook から Snowflake に接続、 SQL 実行ができました
Livebook なら Smart Cell で Elixir をほぼ書かずに実装できるのが良いですね
しかもデータがテーブルで表示されるので、結果も確認しやすいです
Snowflake 自体をまだまだ使いこなせていないので、今後色々試してみようと思います