LoginSignup
10
2

Snowflakeに入門してみた〜テーブル作成からストアド呼び出し編〜

Last updated at Posted at 2023-12-08

はじめに

ARIのアドベンドカレンダに初参戦しました!

みなさま、いかがお過ごしでしょうか。
最近は現場で"Snowflake"という単語をよく耳にするようになりました。

:man_tone3:「データレイク環境をSnowflakeにリプレイスしましょう。」
:man_tone4:「上流がSnowflakeにリプレイスされたので、それの対応しといて。」
:older_man_tone2:「そこの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

先ほど作成したテーブルとスキーマを指定して実行すると、テーブルが作成されていることが確認できました!

スクリーンショット 2023-12-04 18.25.01.png

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

実行すると、先ほど作成したテーブルが表示されます。

スクリーンショット 2023-12-04 18.34.43.png

少し捻ってTYPEで絞り込んでみましょう。

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が「草」のレコードだけ表示されています。

スクリーンショット 2023-12-04 18.34.14.png

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

スクリーンショット 2023-12-04 18.58.50.png

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

上手く呼び出せました!

スクリーンショット 2023-12-04 18.59.49.png

おわりに

テーブル作成からストアドプロシージャの呼び出しと、Snowflake未経験から初心者にランクアップできた気がします。
上記全て実施しても1時間程度で終わるため、皆さんもぜひ入門してみてください!

10
2
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
10
2