Snowflake

SnowflakeテーブルをPythonで使いたい!【snowflake-connector-python】

おはようございます!yokochanです!

最近寒いので雪でも降るんじゃないかと心配しています。

雪と言えばSnowflake(ちょっと強引?)なのでこの記事では”snowflake-connector-python”を使ったSnowflakeとPythonの接続方法を解説します。

Pythonコネクタのインストール

SnowflakeとPythonを接続するにはコネクタが必要なので下記のコードなどでインストールします(参照:Snowflakeドキュメント

pip install snowflake-connector-python

 

サンプルコード

実際の使用例です。

例ではSnowflakeのテーブル”TBL”をPythonのDataFrameに落とし込むだけのものです。

sample1.py

import snowflake.connector as sf

ctx = sf.connect(
    user = 'USERNAME',
    password = 'pass1234',
    account = 'xy12345.ap-northeast-1.aws',
    warehouse = 'COMPUTE_WH',
    database='DBNAME',
    schema='SCNAME'
)

cs = ctx.cursor()
sql = "select * from TBL"
cs.execute(sql)

df = cs.fetch_pandas_all()

応用

上記ではコードの中に認証情報などをべた書きしているので、あまり好ましくないですよね。

認証情報は”config.txt”などの別のファイルとして保存しておき、呼び出して使うような作りにしておくといい感じかもですね。

config.txt

SNOWFLAKE_USER='USERNAME'
SNOWFLAKE_PASSWORD='pass1234'
SNOWFLAKE_ACCOUNT='xy12345.ap-northeast-1.aws'
SNOWFLAKE_WAREHOUSE='COMPUTE_WH'
SNOWFLAKE_DATABASE='DBNAME'
SNOWFLAKE_SCHEMA='SCNAME'

 

sample2.py

import os
import snowflake.connector as sf

# テキストファイルから環境変数を読み込む
with open('config.txt') as file:
    for line in file:
        key, value = line.strip().split('=')
        os.environ[key] = value

# 環境変数から値を取得する
snowflake_user = os.getenv('SNOWFLAKE_USER')
snowflake_password = os.getenv('SNOWFLAKE_PASSWORD')
snowflake_account = os.getenv('SNOWFLAKE_ACCOUNT')
snowflake_warehouse = os.getenv('SNOWFLAKE_WAREHOUSE')
snowflake_database = os.getenv('SNOWFLAKE_DATABASE')
snowflake_schema = os.getenv('SNOWFLAKE_SCHEMA')

ctx = sf.connect(
    user = snowflake_user,
    password = snowflake_password,
    account = snowflake_account,
    warehouse = snowflake_warehouse,
    database=snowflake_database,
    schema=snowflake_schema
)

cs = ctx.cursor()
sql = "select * from TBL"
cs.execute(sql)

df = cs.fetch_pandas_all()

 

さらに関数化しておくとより使いやすいですね。

sample3.py

import os
import snowflake.connector as sf

# テキストファイルから環境変数を読み込む
with open('config.txt') as file:
    for line in file:
        key, value = line.strip().split('=')
        os.environ[key] = value

# 環境変数から値を取得する
snowflake_user = os.getenv('SNOWFLAKE_USER')
snowflake_password = os.getenv('SNOWFLAKE_PASSWORD')
snowflake_account = os.getenv('SNOWFLAKE_ACCOUNT')
snowflake_warehouse = os.getenv('SNOWFLAKE_WAREHOUSE')
snowflake_database = os.getenv('SNOWFLAKE_DATABASE')
snowflake_schema = os.getenv('SNOWFLAKE_SCHEMA')

def snowflake_connection():
    return sf.connect(
        user = snowflake_user,
        password = snowflake_password,
        account = snowflake_account,
        warehouse = snowflake_warehouse,
        database=snowflake_database,
        schema=snowflake_schema
    )

def fetch_data(query, connection)
    cs = connection.cursor()
    cs.execute(query)
    return cursor.fetch_pandas_all()

 

最近はStreamlitを使ってSnowflakeのデータをいじったりしていたのでそういうときに”snowflake-connector-python”は便利に使えます!

 

 

yokochan
データ基盤構築やデータ可視化をやっています。 夏は沖縄の海、冬は北海道の山、年がら年中ももクロのライブ会場。