我正在尝试使用熊猫将数据推送到雪花表中,但是正在发生一些奇怪的事情。数据加载到雪花表中(我可以看到它),几秒钟(例如2秒)后,我看不到任何记录。我不知道这里发生了什么
这是我的代码块。如果能得到帮助,我将非常感谢。
connection = create_engine(
'snowflake://{user}:{password}@{account}/{database}/{schema}?warehouse={warehouse}'.format(
user=''xxxxx,
password='xxxxx',
account='xxxx.xxxx-xxxxxxxx-1',
warehouse='xxxx',
database='xxxxx',
schema='xxxxxx'
)
)
Transformation
with connection.connect().execution_options(autocommit=True) as conn:
check_sql = "select * from subscription_changes_new"
check_df = pd.read_sql(check_sql, conn)
if len(check_df) > 0:
conn.execute(text("delete from subscription_changes_new'"))
subscription_changes.to_sql('subscription_changes_new', conn, if_exists='append', index=False, index_label=None)
elif len(check_df) == 0:
subscription_changes.to_sql('subscription_changes_new', conn, if_exists='append', index=False, index_label=None)
else:
None
我正在使用python 3.7
答案 0 :(得分:1)
我无法使用python 3.7.9重现该问题,并且您的代码没有任何问题。您的程序中是否还有其他未显示的代码可能会起作用?
要解决此问题,建议您检查Snowflake中的“历史记录”选项卡,以查看是否有其他进程导致删除。我还建议更改您的逻辑以使用如下内容:
with connection.connect().execution_options(autocommit=True) as conn:
check_sql = "select count(*) as cnt from subscription_changes_new"
check_df = pd.read_sql(check_sql, conn)
if check_df.iloc[0, 0] > 0:
conn.execute(text("delete from subscription_changes_new"))
subscription_changes.to_sql('subscription_changes_new', conn, if_exists='append', index=False, index_label=None)
print('I deleted and inserted')
elif check_df.iloc[0, 0] == 0:
subscription_changes.to_sql('subscription_changes_new', conn, if_exists='append', index=False, index_label=None)
print('I just inserted')
else:
print('I did nothing')
这将具有相同的效果,但不需要为查询查询进行计算,并且根据表的大小,只需在Snowflake中命中元数据缓存即可提高性能。