0

我们有几个本地数据库,到目前为止,我们的数据仓库也是本地的。现在转移到云端,数据仓库将在 Snowflake 中。但是我们的本地源系统仍然比云中的多,因此希望坚持使用我们的本地 ETL 解决方案。我们使用 Pentaho 数据集成 (PDI) 作为我们的 ETL 工具。

然后我们遇到的问题是,使用 Snowflake JDBC 驱动程序的 PDI 表输出步骤对于将批量加载到 Snowflake 中非常慢。一年前情况更糟,因为它只是在每一行之后执行 INSERT INTO 和 COMMIT 。到今天它已经改进了很多,(当查看雪花历史/日志时)它现在似乎对某个临时雪花阶段做了某种 PUT,但是从那里仍然对目标表进行某种 INSERT,这是慢(在我们的测试用例中,加载 1 000 000 条记录需要一个小时)。

我们使用了批量加载的解决方法,我们使用 SnowSQL(雪花命令行工具)脚本将批量加载到由 PDI 编排的雪花中。在我们的示例中,将相同的 1 000 000 条记录导入 Snowflake 只需不到一分钟的时间。

然后在 Snowflake 数据库中完成的所有事情都是通过通过 JDBC 发送到 Snowflake 的 PDI SQL 步骤完成的,我们所有的源系统查询都可以使用 PDI 正常运行。所以问题只在于批量加载到雪花中,我们需要做一些奇怪的解决方法:

代替:

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 驱动程序),但希望它更好地工作.

4

1 回答 1

0

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

于 2020-02-26T14:35:50.167 回答