❄️
Snowflake-Connector-Python使ってみた
こんにちは!kirigayaです。
今回はSnowflake-connector-pythonを使ってデータフレームを登録してみました。
さっそくやっていきましょう。
ドキュメントはこちら...
環境はMacです。
poetry
とvenv
使っています。
Snowflake-Python-Connectorをインストールする
poetry add snowflake-connector-python
色々入る...
• Installing cryptography (42.0.5)
• Installing asn1crypto (1.5.1)
• Installing pyjwt (2.8.0)
• Installing pyopenssl (24.1.0)
• Installing sortedcontainers (2.4.0)
• Installing tomlkit (0.12.4)
• Installing snowflake-connector-python (3.7.1)
pythonコードはこちら
※userとpasswordはログインで使うやつ
import snowflake.connector
import numpy as np
import pandas as pd
# Snowflake接続情報
snowflake_config = {
'account': 'TEST',
'user': 'TEST1',
'password': '*****',
'warehouse': 'TEST-WH',
'database': 'TEST-DB',
'schema': 'TEST',
'login_timeout': 60,
'validate_default_parameters': True
}
# Snowflakeに接続する関数
def connect_to_snowflake():
conn = snowflake.connector.connect(**snowflake_config)
return conn
# データを作成しSnowflakeのデータベースに登録する関数
def insert_test_data(conn):
# 2x2の数値データを作成
data = np.array([[1, 2], [3, 4]])
df = pd.DataFrame(data, columns=['col1', 'col2'])
# データをSnowflakeのテーブルに挿入
with conn.cursor() as cursor:
cursor.execute("CREATE OR REPLACE TABLE test_table (col1 INT, col2 INT)")
cursor.executemany("INSERT INTO test_table (col1, col2) VALUES (%s, %s)", df.values.tolist())
print("テストデータをデータベースに登録しました。")
# データを削除する関数
def delete_test_data(conn):
# データベースからテストデータを削除
with conn.cursor() as cursor:
cursor.execute("DROP TABLE IF EXISTS test_table")
print("テストデータをデータベースから削除しました。")
# メイン関数
def main():
conn = connect_to_snowflake()
insert_test_data(conn)
# delete_test_data(conn)
conn.close()
if __name__ == "__main__":
main()
エラーが出る
エラー内容
Traceback (most recent call last):
.
.
中略
.
.
snowflake.connector.errors.OperationalError: 250001: Could not connect to Snowflake backend after 2 attempt(s).Aborting****
snowflake.connector.errors.OperationalError: 250001: Could not connect to Snowflake backend after 2 attempt(s).Aborting****
接続ができないと言われます...
account
の部分に組織も含めます。
snowflake_config = {
'account': 'WZGIDMC.TEST',
'user': 'TEST',
'password': '*****',
'warehouse': 'TEST-WH',
'database': 'TEST-DB',
'schema': 'TEST',
'login_timeout': 60,
'validate_default_parameters': True
}
まだエラーが出ます...
正しくは
組織-account
です.
ではなく-
です...
snowflake_config = {
'account': 'WZGIDMC-TEST',
'user': 'TEST',
'password': '*****',
'warehouse': 'TEST-WH',
'database': 'TEST-DB',
'schema': 'TEST',
'login_timeout': 60,
'validate_default_parameters': True
}
ドキュメントにちゃんと書いてある...
ctx = snowflake.connector.connect(
user='<user_name>',
password='<password>',
account='myorganization-myaccount',
... )
ちなみにaccount
のところはアカウントロケーターを使う方法もあるようです
アカウントページのロケーター列で確認することができます
ctx = snowflake.connector.connect(
user='<user_name>',
password='<password>',
account='xy12345',
... )
お疲れ様です...
Discussion