gpt4 book ai didi

python - 将数据从 Pandas 存储到 Snowflake 的最佳方式

转载 作者:太空狗 更新时间:2023-10-30 00:15:52 24 4
gpt4 key购买 nike

数据框很大(7-8 百万行)。尝试使用 chunksize = 5000 的 to_sql 但它从未完成。

使用,

from sqlalchemy import create_engine
from snowflake.sqlalchemy import URL

df.to_sql(snowflake_table , engine, if_exists='replace', index=False, index_label=None, chunksize=20000)

将数据从 Pandas DF 存储到 SF 的其他最佳解决方案是什么?或者我在这里做错了什么? DF 的大小通常为 7-10 百万行。

最佳答案

我能想到的最不痛苦的方法是将文件转储到 S3 并拥有 Snowpipe将其自动加载到 Snowflake 中。通过该设置,您根本不必执行任何复制命令或进行任何 Snowflake 调用。

有关如何设置 Snowpipe for S3 的详细信息,请参阅 Snowflake 文档.简而言之,您需要创建一个阶段、一个目标表、一种文件格式(我想您已经准备好了这些东西)和一个管道。然后为管道将监听的存储桶设置 SQS 通知。

Snowflake suggests文件大小约为 10-100 MB,因此拆分文件可能是个好主意。

# set up credentials (s3fs is built on BOTO hence this is AWS specific)
fs = s3fs.S3FileSystem(key=key, secret=secret)

# number of files to split into
n_chunks = 2

# loop over dataframe and dump chunk by chunk to S3
# (you likely want to expand file naming logic to avoid overwriting existing files)
for f_name, chunks in enumerate(np.array_split(np.arange(df.shape[0]), n_chunks)):
bytes_to_write = df.iloc[chunks].to_csv(index=False).encode()
with fs.open('s3://mybucket/test/dummy_{}.csv'.format(f_name), 'wb') as f:
f.write(bytes_to_write)

作为引用,我尝试将 7M 行数据帧拆分为 5 个大约 40 MB 的文件。从开始拆分数据帧到所有行都到达 Snowflake 大约用了 3 分 40 秒。

关于python - 将数据从 Pandas 存储到 Snowflake 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51745657/

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