无法理解数十亿行的更新计数 INSERT
Posted
技术标签:
【中文标题】无法理解数十亿行的更新计数 INSERT【英文标题】:Unable to fathom update count INSERT on billions of rows 【发布时间】:2016-05-17 18:05:53 【问题描述】:我正在运行一个 Netezza SQL 查询,该查询从一个返回近 80 亿行的 select 语句创建一个表。这是查询:
CREATE TABLE
table1 AS
(
SELECT
column1
FROM
table2 qt
WHERE
qt.column1 = '2016-04-04'
UNION ALL
SELECT
column1
FROM
table3 qt
WHERE
qt.column1 = '2016-04-04'
)
驱动程序抛出此错误:
org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [UNDEFINED]; error code [0];
--- The error occurred while applying a parameter map.
--- Check the statement (update failed).
--- Cause: Unable to fathom update count INSERT 0 7779737732
有人知道这是什么原因吗?
【问题讨论】:
您使用的是什么数据库?您正在运行的 SQL 查询是什么? 也许驱动程序 / db 只处理可以用 32 位或更少位表示的整数,至少在这种情况下是这样。你并没有真正给我们太多的帮助。 @azurefrog 它被标记为 Netezza。我也添加了查询,虽然我不认为它在这种情况下特别有用。 @SnakeDoc,Netazza 提供 64 位整数数据类型并不能保证 JDBC 驱动程序可以处理超过 32 位整数容量的更新计数。此外,尚不清楚错误是由于更新计数大,还是由于 Spring 对该更新计数所做的操作(例如,将其写入辅助表,可能写入类型为(32 位)@987654323 的列@)。 “您的意思是创建一个包含数十亿行的表吗?”。 【参考方案1】:我认为您遇到了 JDBC 驱动程序限制。如果您通过 JDBC 运行 INSERT、UPDATE、CREATE AS SELECT 并且 INSERT、UPDATEd 或 CREATEd 的行数超过 2147483647,您将收到类似以下的错误消息:
Unable to fathom update count INSERT 0 5120000160
考虑到 INSERT、UPDATE 或 CREATE 作为 SELECT 以及实际受影响的行数,上述错误消息可能会有所不同。这是 JDBC 规范本身的限制。
谢谢, 桑吉特
【讨论】:
以上是关于无法理解数十亿行的更新计数 INSERT的主要内容,如果未能解决你的问题,请参考以下文章