はじめに
ARIのアドベンドカレンダに初参戦しました!
みなさま、いかがお過ごしでしょうか。
最近は現場で"Snowflake"という単語をよく耳にするようになりました。
「データレイク環境をSnowflakeにリプレイスしましょう。」
「上流がSnowflakeにリプレイスされたので、それの対応しといて。」
「そこのSnowflake取ってー」
耳にする度に「あー、AWSのSnowファミリーのあいつね(違う)」と思っていた私ですが、そろそろ重たい腰を上げて入門してみようと思います。
Snowflake?
Snowflakeとは、Snowflake社が提供するクラウド型のデータウェアハウスサービスで、強みは「柔軟」「マルチクラウド対応」「高度なセキュリティ」etc... とのこと。
個人的な印象としては、点在しているデータレイク環境を一元化する際に使用されているケースが多いように感じます。
いざ、入門
百聞は一見にしかず!ということで、早速触れていきましょう。
1. トライアルアカウントへのサインアップ
Snowflakeさんは太っ腹で、全サービスを体験できるトライアルがあるようです。
下記いずれかに当てはまることが終了条件のため、うっかり料金が発生してしまうこともなく安心です。
- サインアップ日から30日間
- 無料のクレジット($400)をすべて使い切る
また、メールアドレスさえあれば登録可能で、クレジットカードなど支払い情報も不要とのことです。
エディションは「スタンダード」、クラウドプロパイダーは「AWS」で登録してみました。
2. コンソールにログイン
届いたメールからアクティベーションすると、コンソールにログインします。
サイドバーに色々並んでいますが、とりあえず3つ覚えておけば入門できそうです。
- Worksheets
- ブラウザ上から「SQLクエリ」または「Pythonコード」を実行
- Data
- テーブルやストアドプロシージャを作成/管理
- Activity
- 発行したクエリ履歴
また、1日の終わりに [Admin] > [Usage] からいくら使用したか確認しておくと良いと思います。
3. テーブル作成
まず、テーブルを作成していきます。
[Worksheets] > [+] > [SQLワークシート] から、下記クエリを流していきます。
CREATE DATABASE TEST_DATABASE;
CREATE SCHEMA TEST_SCHEMA;
スキーマを作成した後に、Pythonスクリプトを使ってテーブルを作成します。
今度は、[Worksheets] > [+] > [Pythonワークシート] からスクリプトを実行します。
from snowflake.snowpark.types import StructType, StructField, IntegerType, StringType
import snowflake.snowpark as snowpark
def main(session: snowpark.Session):
# 列定義
schema = StructType([
StructField('ID', IntegerType()),
StructField('NAME', StringType()),
StructField('TYPE', StringType()),
])
# DataFrameの構築
df = session.create_dataframe([
[1, 'ウェンティ', '風'],
[2, '鍾離', '岩'],
[3, '雷電将軍', '雷'],
[4, 'ナヒーダ', '草'],
[5, 'フリーナ', '水'],
[6, 'ニィロウ', '水'],
[7, '胡桃', '炎'],
[8, 'ファルザン', '風'],
[9, '八重神子', '雷'],
[10, 'コレイ', '草'],
], schema)
# テーブルへのデータの保存
df.write.mode('overwrite').save_as_table('TEST_TABLE')
return df
先ほど作成したテーブルとスキーマを指定して実行すると、テーブルが作成されていることが確認できました!
4. ストアドプロシージャ作成
テーブルが作成できたので、色々と遊んでみましょう。
[Worksheets] > [+] > [Pythonワークシート] からテーブルを参照してみます。
import snowflake.snowpark as snowpark
def main(session: snowpark.Session):
database = 'TEST_DATABASE'
schema = 'TEST_SCHEMA'
table = 'TEST_TABLE'
query = f'SELECT * FROM {database}.{schema}.{table}'
df = session.sql(query)
return df
実行すると、先ほど作成したテーブルが表示されます。
少し捻ってTYPEで絞り込んでみましょう。
import snowflake.snowpark as snowpark
def main(session: snowpark.Session):
database = 'TEST_DATABASE'
schema = 'TEST_SCHEMA'
table = 'TEST_TABLE'
type = '草'
query = f"""
SELECT * FROM {database}.{schema}.{table}
WHERE TYPE = '{type}'
"""
df = session.sql(query)
return df
実行すると、TYPEが「草」のレコードだけ表示されています。
TYPEを引数で受け取ってDataframeを返すストアドプロシージャを作成してみます。
import snowflake.snowpark as snowpark
session = snowpark.Session
def main(session, type):
database = 'TEST_DATABASE'
schema = 'TEST_SCHEMA'
table = 'TEST_TABLE'
query = f"""
SELECT * FROM {database}.{schema}.{table}
WHERE TYPE = '{type}'
"""
df = session.sql(query)
return df
ワークシート右上の[Deploy]から、ストアドプロシージャを作成してみます。
Key | Value |
---|---|
Procedure name | TEST_PROCEDURE |
Handler | main |
Parameters - type | VARCHER |
5. ストアドプロシージャ呼び出し
最後に作成したストアドプロシージャを呼び出してみましょう。
[Worksheets] > [+] > [Pythonワークシート] からスクリプトを記述します。
import snowflake.snowpark as snowpark
def main(session: snowpark.Session):
database = 'TEST_DATABASE'
schema = 'TEST_SCHEMA'
procedure = 'TEST_PROCEDURE'
type = '水'
df = session.call(f'{database}.{schema}.{procedure}', type)
return df
上手く呼び出せました!
おわりに
テーブル作成からストアドプロシージャの呼び出しと、Snowflake未経験から初心者にランクアップできた気がします。
上記全て実施しても1時間程度で終わるため、皆さんもぜひ入門してみてください!