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中是啥意思?
Code: 210. DB::NetException: Connection refused (localhost:9000)