通过Petnatho通过JDBC进行数据集成到Snowflake的大容量加载速度很慢

问题描述 投票:0回答:1

我们有几个本地数据库,到目前为止,我们的数据仓库也都位于本地。现在移至云计算和数据仓库将在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驱动程序),但我想拥有它工作得更好。

pentaho snowflake-data-warehouse pentaho-data-integration pdi snowsql
1个回答
0
投票

要在Snowflake中批量加载,您需要进行放置和复制。

© www.soinside.com 2019 - 2024. All rights reserved.