❄️

Snowflake-Connector-Python使ってみた

2024/03/27に公開

こんにちは!kirigayaです。
今回はSnowflake-connector-pythonを使ってデータフレームを登録してみました。
さっそくやっていきましょう。

ドキュメントはこちら...
https://docs.snowflake.com/ja/developer-guide/python-connector/python-connector-connect

環境はMacです。
poetryvenv使っています。

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
}

ドキュメントにちゃんと書いてある...
https://docs.snowflake.com/ja/developer-guide/python-connector/python-connector-api#usage-notes-for-the-account-parameter-for-the-connect-method

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