在列数相等的表上应用 UNION 时出现“无法创建行...大于允许的最大行大小”错误

Posted

技术标签:

【中文标题】在列数相等的表上应用 UNION 时出现“无法创建行...大于允许的最大行大小”错误【英文标题】:"Cannot create a row ... greater than the allowable maximum row size" error when applying UNION on tables with equal number of columns 【发布时间】:2020-04-22 10:20:50 【问题描述】:

我正在尝试合并 5 个表。它们每个都有相同数量的列(300+)。我可以愉快地单独加载每个表。

错误是

无法创建大于允许的最大行大小 8060 的大小为 8161 的行。

这是不言自明的 - 整行组合(300 多列)在内存中太大。

我很困惑最初是如何制作这张桌子的,以及如何期望我联合起来?联合不会增加行大小,只会增加行数,如果可以单独选择联合,那么联合如何触发这一点很困惑。

有没有办法抑制这种限制?

谢谢!

【问题讨论】:

【参考方案1】:

类型转换可以改变各个列的大小。 union 查询不需要所有列都具有完全相同的类型,因此它允许进行一些隐式转换。

例如,这个:

select convert(tinyint, 1)
union all
select convert(int, 102345678)

返回和整数——与tinyint 相比,多了三个字节。对于日期和日期时间,甚至对于国家字符集,这很容易发生。

【讨论】:

以上是关于在列数相等的表上应用 UNION 时出现“无法创建行...大于允许的最大行大小”错误的主要内容,如果未能解决你的问题,请参考以下文章

在具有相同架构的表上使用 UNION ALL 的 Google Big Query 中的 SQL 错误编辑:架构从 String 更改为 INT

在 mysql 表上添加外键约束时出现错误 1005

在过程中动态添加的表上创建触发器

sql 的并集UNION和内联结INNER JOIN 有啥区别?感觉结果是一样的。

合并具有不同列数的表

在表上使用 Pivot 函数时出现缺少逗号错误