从熊猫到雪花的数据加载会回滚

时间:2020-11-06 16:07:40

标签: python pandas sqlalchemy snowflake-cloud-data-platform

我正在尝试使用熊猫将数据推送到雪花表中,但是正在发生一些奇怪的事情。数据加载到雪花表中(我可以看到它),几秒钟(例如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

1 个答案:

答案 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中命中元数据缓存即可提高性能。