おはようございます!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”は便利に使えます!