使用 JDBC 上的 Petnatho 数据集成批量加载到 Snowflake 很慢

Bulk load into Snowflake with Petnatho Data Integration over JDBC is slow

我们有几个内部部署数据库,到目前为止,我们的数据仓库也作为内部部署。现在转移到云端,数据仓库将在 Snowflake 中。但是我们的内部部署源系统仍然多于云中的源系统,所以我想坚持使用我们的内部部署 ETL 解决方案。我们正在使用 Pentaho 数据集成 (PDI) 作为我们的 ETL 工具。

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

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

然后在 Snowflake 数据库中完成的所有工作都是通过 PDI SQL 通过 JDBC 发送到 Snowflake 的步骤完成的,我们所有的源系统查询 运行 都可以使用 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 中批量加载,您需要进行放置和复制。