Пример подключения Snowflake к Python

В предыдущем посте мы привели пример как загрузить данные из S3 в Snowflake. Data Scientists и Data Engineers хорошо знакомы с Python и Pandas Data Frames, поэтому очень важно иметь возможность соединять Snowflake с Python. В этом руководстве мы покажем вам, как получить данные из Snowflake в вашей локальной среде на Python.

База данных и таблицы Snowflake

Для этого руководства мы создали базу данных с именем GPIPIS_DB, в которой есть таблица с именем MYIRISTABLE.

Установите библиотеки Python

Нам потребуется установить следующие библиотеки Python.

pip install snowflake-connector-python
pip install --upgrade snowflake-sqlalchemy
pip install "snowflake-connector-python[pandas]"

Есть разные способы получить данные из Snowflake в Python. Ниже мы приводим несколько примеров, но сначала давайте загрузим библиотеки.

import snowflake.connector
import pandas as pd
from snowflake.sqlalchemy import URL
from sqlalchemy import create_engine

Получить данные как фрейм данных Pandas с помощью sqlalchemy

Нам нужно будет создать механизм подключения, а затем выполнить SQL-запрос. Обратите внимание, что идентификатор учетной записи (account) - это то, что вы видите в URL-адресе до .snowflakecomputing.com

url = URL(
    user='XXX',
    password='XXX',
    account='<ACCOUNT_ID>',
    warehouse='TEST_WH',
    database='GPIPIS_DB',
    schema='PUBLIC',
    role = 'ACCOUNTADMIN'
)
engine = create_engine(url)
connection = engine.connect()
query = '''
select * from myiristable
'''
df = pd.read_sql(query, connection)
df

Как мы видим, нам удалось загрузить таблицу снежинок в нашу локальную среду.

Получить данные как фрейм данных Pandas с помощью snowflake.connector и fetch_pandas_all

Если вы установили snowflake-connector-python[pandas], вы можете загрузить данные следующим образом.

conn = snowflake.connector.connect(
    user='XXX',
    password='XXX',
    account='<ACCOUNT_ID>',
    warehouse='TEST_WH',
    database='GPIPIS_DB',
    schema='PUBLIC',
    role = 'ACCOUNTADMIN'
            )
cur = conn.cursor()
sql = "select * from myiristable"
cur.execute(sql)
df = cur.fetch_pandas_all()
df

Получить данные как фрейм данных Pandas, используя snowflake.connector и from_records

В качестве альтернативы мы можем перебрать объект cur следующим образом:

conn = snowflake.connector.connect(
    user='XXX',
    password='XXX',
    account='<ACCOUNT_ID>',
    warehouse='TEST_WH',
    database='GPIPIS_DB',
    schema='PUBLIC',
    role = 'ACCOUNTADMIN'
            )
cur = conn.cursor()
sql = "select * from myiristable"
cur.execute(sql)
df = pd.DataFrame.from_records(iter(cur), columns=[x[0] for x in cur.description])
df

Получите данные, перебирая курсор

Наконец, мы можем получить данные, перебирая курсор следующим образом:

conn = snowflake.connector.connect(
    user='XXX',
    password='XXX',
    account='<ACCOUNT_ID>',
    warehouse='TEST_WH',
    database='GPIPIS_DB',
    schema='PUBLIC',
    role = 'ACCOUNTADMIN'
            )
cur = conn.cursor()
sql = "select * from myiristable"
cur.execute(sql)
for record in cur:
    print(record)

Мы можем получить данные для каждого столбца следующим образом:

cur.execute(sql)
for i,j,k,l,m in cur:
    print(i,j,k,l,m)

Закройте соединения

Как только мы закончим, мы можем закрыть соединения:

conn.close()
connection.close()
cur.close()

Эта статья изначально была опубликована компанией Predictive Hacks