通过Petnatho通过JDBC进行数据集成到Snowflake的大容量加载速度很慢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过Petnatho通过JDBC进行数据集成到Snowflake的大容量加载速度很慢相关的知识,希望对你有一定的参考价值。
我们有几个本地数据库,到目前为止,我们的数据仓库也都位于本地。现在移至云计算和数据仓库将在Snowflake。但是我们仍然拥有比云中更多的本地源系统,因此我们希望坚持使用我们的本地ETL解决方案。我们正在使用Pentaho数据集成(PDI)作为我们的ETL工具。
然后,我们面临的问题是,使用Snowflake JDBC驱动程序的PDI表输出步骤对于将大量数据加载到Snowflake来说非常慢。一年前,情况甚至更糟,因为每行之后都进行INSERT INTO和COMMIT。到今天为止,它已经有了很大的改进(在查看Snowflake的历史记录/日志时),它现在似乎已经对临时的Snowflake阶段进行了某种PUT,但是从那以后仍然对目标表执行了某种INSERT操作,这就是速度慢(在我们的测试用例中,花了一个小时来加载1000000条记录)。
我们使用了批量加载的解决方法,我们使用SnowSQL(Snowflakes命令行工具)脚本来将批量加载放入由PDI编排的Snowflake中。在我们的示例案例中,花了不到一分钟的时间将相同的100万条记录放入Snowflake。
然后在Snowflake数据库中完成的所有工作都只是通过通过JDBC发送到Snowflake的PDI SQL步骤完成的,我们所有的源系统查询都可以在PDI上正常运行。因此,问题仅在于Snowflake的批量加载,我们需要做一些怪异的解决方法:
而不是:
PDI.Table input(get source data) >> PDI.Table output(write to Snowflake table)
我们有:
PDI.Table input(get source data) >> PDI.Write to local file >> Snowsql.PUT local file to Snowflake Stage >> Snowsql.COPY data from Snowflake Stage to Snowflake table >> PDI clear local file, also then clear Snowflake stage.
它可以工作,但是比需要的复杂得多(例如,与之前的本地数据库负载相比)。
我什至不知道这个问题是在Snowflake上(如果JDBC驱动程序工作不理想)还是在PDI上(如果它只是没有正确使用JDBC驱动程序),但我想拥有它工作得更好。
要在Snowflake中批量加载,您需要进行放置和复制。
以上是关于通过Petnatho通过JDBC进行数据集成到Snowflake的大容量加载速度很慢的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch:通过 JDBC 使用 SQL 来查询索引 - DBeaver
Java -- JDBC 学习--通过Statement进行数据库更新操作
通过 JDBC URL 使用 TestContainers DB 但使用 @Rule 时出错