我们可以不使用Python使用Snowflake内部阶段直接将数据写入雪花表吗????
先在stage中写入再转换再加载到表中似乎是辅助任务。是否可以像RDBMS中的JDBC连接一样一步完成?
原文由 HimanshuSPaul 发布,翻译遵循 CC BY-SA 4.0 许可协议
我们可以不使用Python使用Snowflake内部阶段直接将数据写入雪花表吗????
先在stage中写入再转换再加载到表中似乎是辅助任务。是否可以像RDBMS中的JDBC连接一样一步完成?
原文由 HimanshuSPaul 发布,翻译遵循 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 许可协议
将数据加载到 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 之后而不是之前完成转换。