En utilisant Python Connector je peux interroger Snowflake:
import snowflake.connector
# Gets the version
ctx = snowflake.connector.connect(
user=USER,
password=PASSWORD,
account=ACCOUNT,
authenticator='https://XXXX.okta.com',
)
ctx.cursor().execute('USE warehouse MY_WH')
ctx.cursor().execute('USE MYDB.MYSCHEMA')
query = '''
select * from MYDB.MYSCHEMA.MYTABLE
LIMIT 10;
'''
cur = ctx.cursor().execute(query)
Le résultat est un snowflake.connector.cursor.SnowflakeCursor
. Comment puis-je convertir cela en un pandas DataFrame?
Vous pouvez utiliser DataFrame.from_records()
ou pandas.read_sql()
avec snowflake-sqlalchemy . L'option de flocon de neige-alchimie a une API plus simple
pd.DataFrame.from_records(iter(cur), columns=[x[0] for x in cur.description])
renverra un DataFrame avec des noms de colonne appropriés extraits du résultat SQL. La iter(cur)
convertira le curseur en itérateur et cur.description
Donne les noms et les types des colonnes.
Le code complet sera donc
import snowflake.connector
import pandas as pd
# Gets the version
ctx = snowflake.connector.connect(
user=USER,
password=PASSWORD,
account=ACCOUNT,
authenticator='https://XXXX.okta.com',
)
ctx.cursor().execute('USE warehouse MY_WH')
ctx.cursor().execute('USE MYDB.MYSCHEMA')
query = '''
select * from MYDB.MYSCHEMA.MYTABLE
LIMIT 10;
'''
cur = ctx.cursor().execute(query)
df = pd.DataFrame.from_records(iter(cur), columns=[x[0] for x in cur.description])
Si vous préférez utiliser pandas.read_sql
, Vous pouvez
import pandas as pd
from sqlalchemy import create_engine
from snowflake.sqlalchemy import URL
url = URL(
account = 'xxxx',
user = 'xxxx',
password = 'xxxx',
database = 'xxx',
schema = 'xxxx',
warehouse = 'xxx',
role='xxxxx',
authenticator='https://xxxxx.okta.com',
)
engine = create_engine(url)
connection = engine.connect()
query = '''
select * from MYDB.MYSCHEMA.MYTABLE
LIMIT 10;
'''
df = pd.read_sql(query, connection)