Clickhouse 中的最大表格列数

Posted

技术标签:

【中文标题】Clickhouse 中的最大表格列数【英文标题】:Maximum number of table columns in Clickhouse 【发布时间】:2019-12-08 17:37:55 【问题描述】:

我尝试测试边界并注意到如果表中有 5K 列,即使我尝试仅插入 2 列值,我也会得到 从 127.0.0.1:9000 收到。 DB::Exception:超出内存限制(用于查询):将使用 9.31 GiB

有没有办法处理大量的指标?

单个表的列数实际限制是多少?

【问题讨论】:

【参考方案1】:

我认为没有限制(除了您的硬件限制)。尝试增加查询的最大内存使用量

https://clickhouse.yandex/docs/en/operations/settings/query_complexity/#settings_max_memory_usage

【讨论】:

【参考方案2】:

当您尝试插入任何行时,ClickHouse 为每列分配大约 1-2Mb,所以正确答案是肯定的,它没有严格的限制,但受您的 CPU、内存、与插入的并发客户端连接以及 *MergeTree 表引擎的限制按分区数(请参阅文档中的 PARTITION BY)

【讨论】:

谢谢。奇怪的是,当我有 5000 列并且我使用其中只有 2 个的插入语句,每个只有几个字节时,我仍然会被异常抛出。有没有办法解决这个问题? 此表中的其他 4998 列是如何定义的?使用了哪种数据类型?使用了哪个默认值? 4500 个字符串和 500 个 Int32 ,没有设置任何默认值 你的意思是没有使用 Nullable 的 4500 字符串吗?所以,当你定义 field String 时,它的意思是 field String DEFAULT ''field Int32 意味着 field Int32 DEFAULT 0 我认为你只是尝试分配 2Mb* 5000 列,在这种情况下 我还尝试了以下 CREATE TABLE 测试(lc0 Nullable(String) default NULL, lc1 Nullable(String) default NULL, lc2 Nullable(String) default NULL, lc3 Nullable(String) default NULL, . ... lc5000 ... 然后运行 ​​'insert into test(lc1,pk) values('12','231') 并得到相同的结果

以上是关于Clickhouse 中的最大表格列数的主要内容,如果未能解决你的问题,请参考以下文章

在clickhouse中,投射失败时如何返回null而不是抛出异常?

Apache Doris 和 ClickHouse 的选型比较

“DB::Exception: RangeReader read 7523 rows, but 7550 expected”异常在clickhouse中是啥意思?

ABAP SCREEN的内表列数有限制吗

Code: 210. DB::NetException: Connection refused (localhost:9000)

每个范围的最小和最大 ID,其中范围是 ClickHouse 中的 N 行