我目前正在处理一个数据帧,该数据帧产生错误,即雪花一次导入的行太多。
我环顾四周,确实发现to_sql可以选择标记块大小。
但是,当我为此输入一个数字时,我收到此错误: sqlalchemy.exc.ProgrammingError: (snowflake.connector.errors.ProgrammingError) 100038 (22018): 无法识别数值"unknown">
这是我的代码,我认为它非常简单,我没有看到任何明显的错误:
engine = sqlalchemy.create_engine('snowflake://USERNAME:PASSWORD@SNOWFLAKE_LINK/DATABASE/SCHEMA?warehouse=WAREHOUSE&role=ROLE', connect_args = {'connect_timeout': 10}, echo=False)
df2.to_sql('TABLE', con=engine, schema='PUBLIC', index = False, if_exists = 'append', method= 'multi', chunksize=16384)
当涉及到这一点时,这是 Snowflake 的一个怪癖,还是我需要使用 write_pandas 之类的东西来导入我的数据?
最终弄清楚了。
这是最终起作用的代码:
df2.to_sql('TABLENAME', con=cursor, index = False, if_exists = 'append', method=pd_writer)
pd_writer似乎是我需要的方法,将超过 16K 行放入 Snowflake。
如果你想使用块,你也可以使用以下代码
import pandas as pd
def fetch_pandas_sqlalchemy(sql):
rows = 0
for chunk in pd.read_sql_query(sql, engine, chunksize=50000):
rows += chunk.shape[0]
print(rows)