我无法从雪花加载460万行(11个变量)到python。我通常使用R,它可以毫无问题地处理数据……但是我在Python(我很少使用,但在这种情况下需要使用)上苦苦挣扎。
到目前为止的尝试:
使用新的python连接器-获取错误消息(如此处记录:Snowflake Python Pandas Connector - Unknown error using fetch_pandas_all)
修改我以前的代码以批量工作..-这就是我希望在这里获得帮助的地方。
雪花网页https://docs.snowflake.com/en/user-guide/python-connector-pandas.html上的示例代码几乎可以带我到那里,但没有显示如何有效地将多个提取中的数据连接起来-毫无疑问,因为熟悉python的人已经知道这一点。 >
我在这里:
import snowflake.connector
import pandas as pd
from itertools import chain
SNOWFLAKE_DATA_SOURCE = '<DB>.<Schema>.<VIEW>'
query = '''
select *
from table(%s)
;
'''
def create_snowflake_connection():
conn = snowflake.connector.connect(
user='MYUSERNAME',
account='MYACCOUNT',
authenticator = 'externalbrowser',
warehouse='<WH>',
database='<DB>',
role='<ROLE>',
schema='<SCHEMA>'
)
return conn
def fetch_pandas_concat_df(cur):
rows = 0
grow = []
while True:
dat = cur.fetchmany(50000)
if not dat:
break
colstring = ','.join([col[0] for col in cur.description])
df = pd.DataFrame(dat, columns =colstring.split(","))
grow.append(df)
rows += df.shape[0]
print(rows)
return pd.concat(grow)
def fetch_pandas_concat_list(cur):
rows = 0
grow = []
while True:
dat = cur.fetchmany(50000)
if not dat:
break
grow.append(dat)
colstring = ','.join([col[0] for col in cur.description])
rows += len(dat)
print(rows)
# note that grow is a list of list of tuples(?) [[(),()]]
return pd.DataFrame(list(chain(*grow)), columns = colstring.split(","))
cur = con.cursor()
cur.execute(query, (SNOWFLAKE_DATA_SOURCE))
df1 = fetch_pandas_concat_df(cur) # this takes forever to concatenate the dataframes - I had to stop it
df3 = fetch_pandas_concat_list(cur) # this is also taking forever.. at least an hour so far .. R is done in < 10 minutes....
df3.head()
df3.shape
cur.close()
答案 0 :(得分:0)
您正在执行的字符串操作在计算上非常昂贵。此外,为什么要将所有内容组合为一个字符串,只是为了将它们分解出来?
看看雪花文档的this section。本质上,您可以直接从游标对象转到数据框,这将极大地加快处理速度。