在列数相等的表上应用 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