gpt4 book ai didi

python - 雪花 Pandas pd_writer用NULL写入表

转载 作者:行者123 更新时间:2023-12-03 09:56:33 25 4
gpt4 key购买 nike

我有一个使用SQLAlchemy引擎和to_sql函数写给Snowflake的Pandas数据框。它工作正常,但由于某些Snowflake限制,我必须使用chunksize选项。这对于较小的数据帧也很好。但是,某些数据帧有500k +行,每块15k记录时,要完成对Snowflake的写入需要花费永远的时间。
我做了一些研究,发现了Snowflake提供的pd_writer方法,该方法显然可以更快地加载数据帧。我的Python脚本的完成速度更快,并且我看到它创建了一个具有所有正确的列和正确的行数的表,但是每一行中每一列的值都是NULL。
我认为这是一个从NaNNULL的问题,并尝试了一切可能的方法,用NaN替换None,并且虽然它在数据帧内进行了替换,但当它到达表时,所有内容都变为NULL。
如何使用pd_writer将这些巨大的数据帧正确地写入Snowflake?有没有可行的选择?
编辑:按照克里斯的回答,我决定尝试使用官方示例。这是我的代码和结果集:

import os
import pandas as pd
from snowflake.sqlalchemy import URL
from sqlalchemy import create_engine
from snowflake.connector.pandas_tools import write_pandas, pd_writer


def create_db_engine(db_name, schema_name):
return create_engine(
URL(
account=os.environ.get("DB_ACCOUNT"),
user=os.environ.get("DB_USERNAME"),
password=os.environ.get("DB_PASSWORD"),
database=db_name,
schema=schema_name,
warehouse=os.environ.get("DB_WAREHOUSE"),
role=os.environ.get("DB_ROLE"),
)
)


def create_table(out_df, table_name, idx=False):
engine = create_db_engine("dummy_db", "dummy_schema")
connection = engine.connect()

try:
out_df.to_sql(
table_name, connection, if_exists="append", index=idx, method=pd_writer
)

except ConnectionError:
print("Unable to connect to database!")

finally:
connection.close()
engine.dispose()

return True


df = pd.DataFrame([("Mark", 10), ("Luke", 20)], columns=["name", "balance"])

print(df.head)

create_table(df, "dummy_demo_table")

该代码工作正常,没有任何障碍,但是当我查看创建的表时,它全都是NULL。再次。
This is what dummy_demo_table shows me

最佳答案

事实证明,文档(可以说是Snowflake的最薄弱点)与现实不同步。这是真正的问题:https://github.com/snowflakedb/snowflake-connector-python/issues/329。它只需要在列名称中使用一个大写字母即可,并且效果很好。
我的解决方法是简单地做:在调用df.columns = map(str.upper, df.columns)之前先使用to_sql

关于python - 雪花 Pandas pd_writer用NULL写入表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63370701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com