14
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ElixirAdvent Calendar 2023

Day 12

Livebook から Snowflake に接続して SQL を実行する

Last updated at Posted at 2023-11-07

はじめに

Livebook Launch Week 2 を自分でやってみるシリーズ

Day 4 はデータベースとの統合です

今までも PostgreSQL や MySQL などには接続できていましたが、 Snowflake と SQL Server にも接続できるようになっています

本記事では Livebook 上で KinoDB を利用し、 Snowflake への接続、 SQL 実行をやってみます

PostgreSQL への接続、 SQL 実行についてはこちら

実装したノートブックはこちら

Snowflake とは

Snowflake は データクラウド です

詳細な説明は公式サイト等を見てもらうとして、私も今回初めて触れてみたのですが、ざっくりした印象を書いておきます

今までのクラウドデータベースは、あくまでも既存のデータベースをクラウドに持って行った、というものでした

それに対して、 Snowflake はクラウドであることを前提として、 クラウドを使った理想的なデータの集積、整理、保護、処理、出力を一つのプラットフォームにまとめたもの になっています

まさにクラウドネイティブなサービスで、インフラとして AWS や GCP 、 Azure の三大クラウドを選択できたり、当然それらとの連携がしっかり準備されています

個別にデータレイク、データウェアハウス、データマート用のデータベースシステムを構築して連携させる必要がなく、 Snowflake だけで完結できるのも便利です

Snowflake の準備

まだ Snowflake のアカウントを持っていない場合、 30 日間の無料トライアルが使えるので、まずはサインアップしましょう

スクリーンショット 2023-11-02 14.11.25.png

手順に従って進んで、最後に登録したメールアドレスに届いたメールからサインアップを完了すると、自分のアカウントのワークシート一覧が表示されます

スクリーンショット 2023-11-03 23.43.27.png

無料トライアルではサンプルデータベースがすでに作成されているので、今回はこれを利用していきます

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 を追加します

スクリーンショット 2023-11-04 0.02.33.png

すると、以下のような入力フォームが表示されます

スクリーンショット 2023-11-04 0.04.52.png

Snowflake の画面左下をクリックすると、アカウント情報が表示されるので、ここの情報を元に入力してください

スクリーンショット 2023-11-04 0.09.11.png

User name は左側中段に表示されているものを小文字にして入力します

Account は右側上段のリンクアイコンをクリックし、アカウント URL をコピーして入力します

ただし、先頭の https:// (プロトコル)は削除し、ホスト名だけを指定してください

Snowflake の画面左メニューで Data をクリックすると、データベースの一覧が表示されます

今回はサンプルデータベースを使用して、以下のように入力します

  • Database: snowflake_sample_data
  • Schema: tpch_sf1

スクリーンショット 2023-11-04 0.14.58.png

Password は Snowflake へのサインイン時に使用するものを入力してください

全て入力したら Smart Cell の左上 Evaluate をクリックします

結果が {:ok, #PID<0.1494.0>} のようになれば接続できています

SQL の実行

Smart Cell で SQL query を追加します

スクリーンショット 2023-11-04 0.21.47.png

以下のようなフォームが表示されるので、 SQL を変更して左上 Evaluate をクリックします

スクリーンショット 2023-11-04 0.25.46.png

SELECT * FROM lineitem

結果は以下のようにデータテーブルで表示され、自動的に列毎の基本統計量など(最小値、最大値、平均、欠損値数)も算出されています

スクリーンショット 2023-11-04 0.28.41.png

まとめ

KinoDB を使うことで、簡単に Livebook から Snowflake に接続、 SQL 実行ができました

Livebook なら Smart Cell で Elixir をほぼ書かずに実装できるのが良いですね

しかもデータがテーブルで表示されるので、結果も確認しやすいです

Snowflake 自体をまだまだ使いこなせていないので、今後色々試してみようと思います

14
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?