使用 Python 将数据写入雪花

新手上路,请多包涵

我们可以不使用Python使用Snowflake内部阶段直接将数据写入雪花表吗????

先在stage中写入再转换再加载到表中似乎是辅助任务。是否可以像RDBMS中的JDBC连接一样一步完成?

原文由 HimanshuSPaul 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 978
2 个回答

将数据加载到 Snowflake 的绝对最快的方法是从内部或外部阶段的文件加载数据。时期。所有连接器都能够使用标准插入命令插入数据,但这不会很好地执行。也就是说,许多 Snowflake 驱动程序现在透明地使用 PUT/COPY 命令通过内部阶段将大数据加载到 Snowflake。如果这是您所追求的,那么您可以利用 pandas write_pandas 命令在单个命令中将数据从 pandas 数据帧加载到 Snowflake。在幕后,它将为您执行 PUT 和 COPY INTO。

https://docs.snowflake.com/en/user-guide/python-connector-api.html#label-python-connector-api-write-pandas

我强烈建议在任何驱动程序中使用此模式而不是 INSERT 命令。而且我还建议在加载到 Snowflake 之后而不是之前完成转换。

原文由 Mike Walton 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果有人在处理大型数据集时遇到问题。尝试改用 dask 并生成分区成块的数据框。然后你可以将 dask.delayed 与 sqlalchemy 一起使用。在这里,我们使用 snowflake 的本地连接器方法,即 pd_writer,它在引擎盖下使用 write_pandas 并最终使用 PUT COPY 压缩镶木地板文件。老实说,最后归结为您的 I/O 带宽。您拥有的吞吐量越大,它在 Snowflake Table 中的加载速度就越快。但是这个片段总体上提供了相当数量的并行性。

 import functools
from dask.diagnostics import ProgressBar
from snowflake.connector.pandas_tools import pd_writer
import dask.dataframe as dd
df = dd.read_csv(csv_file_path, blocksize='64MB')
ddf_delayed = df.to_sql(
        table_name.lower(),
        uri=str(engine.url),
        schema=schema_name,
        if_exists=if_exists,
        index=False,
        method=functools.partial(
        pd_writer,quote_identifiers=False),
        compute=False,
        parallel=True
    )
with ProgressBar():
    dask.compute(ddf_delayed, scheduler='threads', retries=3)

原文由 chetan_surwade 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进