Snowflake cloud data platform 在JDBC驱动程序上并行执行合并命令不起作用

Snowflake cloud data platform 在JDBC驱动程序上并行执行合并命令不起作用,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我正在同一个JDBC连接上并行运行~22个MERGE命令。我在所有并行执行完成后提交事务。我已打开显式事务。下面是我正在使用的合并命令: MERGE INTO _1 AS A USING ( select $1:Id::VARCHAR as Id, $1:modifiedUtc::NUMBER as MODIFIEDUTC, $1:VersionId::NUMBER as VersionId, $1 as DATA FROM '@EXTERNAL_AWS_STAGE/group1/' (F

我正在同一个JDBC连接上并行运行~22个MERGE命令。我在所有并行执行完成后提交事务。我已打开显式事务。下面是我正在使用的合并命令:

MERGE INTO _1 AS A USING ( select $1:Id::VARCHAR as Id,  $1:modifiedUtc::NUMBER as MODIFIEDUTC,  $1:VersionId::NUMBER as VersionId,  $1 as DATA FROM '@EXTERNAL_AWS_STAGE/group1/' (FILE_FORMAT => JSON_FORMAT) ) AS B  ON A.Id = B.Id  WHEN MATCHED AND A.VersionId < B.VersionId  THEN UPDATE SET A.VersionId = B.VersionId, A.MODIFIEDUTC = B.MODIFIEDUTC, A.DATA = B.DATA  WHEN NOT MATCHED  THEN INSERT (Id, MODIFIEDUTC, VersionId, DATA) VALUES (B.Id, B.MODIFIEDUTC, B.VersionId, B.DATA);
使用select$1:Id::VARCHAR作为Id、$1:modifiedUtc::NUMBER作为modifiedUtc、$1:VersionId::NUMBER作为VersionId、$1作为数据从'@EXTERNAL_AWS_STAGE/group2/'文件中合并为A。格式=>JSON_格式作为B在A.Id=B.Id匹配且A.VersionId 对于三个相同的表,问题是一些表没有得到更新,而其他表则在更新。并不是某个特定的表没有得到更新。有时,比如说表1正在更新,有时则没有更新。我验证了executeUpdatequery方法对所有合并命令都返回1,这表示对所有表更新或插入了一行,但select*from_1对其中一些表返回0行。代码库提交或回滚事务,最后关闭连接

当我尝试通过雪花工作表运行相同的合并命令时,我可以看到所有表中的数据都已更新

任何指针都会非常有用

一些重要的意见:

由于必须在事务边界内处理更新,因此我们调用Connection.setAutoCommitfalse。如果未启用此功能,则不会观察到上述问题。 我们正在向Snowflake发送一批20个查询以供执行。所有20个查询都是使用相同的数据库连接并发触发的。每批20个合并命令后都会暂停2秒。 如果我们尝试按顺序执行合并命令,则不会发现问题。即使在对表进行了两次活动锁定之后,提交也会成功,并更新表中的数据。 对于空的数据表,即使雪花历史也表明合并命令已成功完成,并且每个合并命令的行数为1。 SHOW TRANSACTIONS命令仅在事务处于活动状态之前显示活动事务。成功提交后,此命令不会显示任何活动事务。 SHOW LOCKS命令显示可变的锁数,范围从1到超过所涉及的表数。 如果我们检查showlocks命令的结果集中返回的查询id的历史记录,我们会发现查询已成功完成。
请提供可能有助于进一步识别问题的任何指针。

您是否使用最新的Snowflake JDBC连接器并根据以下内容明确设置多语句选项?

您是否在雪花上看到查询历史记录中的所有查询?试图确定这是否与您正在使用的脚本更相关,而不是雪花问题。此外,在流程完成时是否还有剩余的锁?这将表明有些声明没有提交。