ClickHouse的数据类型中,LowCardinality 用于处理重复度高的数值,特别是对于比较长的字符串类型。
目录导航
语法
LowCardinality(data_type)
data_type
— String, FixedString, Date, DateTime, 和数字类型,除了Decimal。
说明
LowCardinality
修改了数据处理过程中的数据存储方法和规则,使用字典编码(Directionary coding)方案,可以显著的提高SELECT性能。
提升效果与数据特性有关。如果字典里包含不超过1万个不同的值,则可以明显的提高数据读取和存储性能。如果超过了10万个唯一的值,可能性能还不如普通的数据类型。
这个需要测试,特别是唯一值在总数据量的比例,但数据越宽,唯一值越少,效果肯定越好。像国家,地区这类非常有限的数值,则总是会有效果的。而对手机号,IP这类非常分散的,则效果无法保障。
当使用字符类型的时候,可以考虑使用 LowCardinality
代替Enum。 LowCardinality
通常更加灵活和高效。
样例
如下的尘世,民族,地区、超市地段等,都是可以用这个类型。
CREATE TABLE customer
(
C_CUSTKEY UInt32,
C_NAME String,
C_ADDRESS String,
C_CITY LowCardinality(String),
C_NATION LowCardinality(String),
C_REGION LowCardinality(String),
C_PHONE String,
C_MKTSEGMENT LowCardinality(String)
)
ENGINE = MergeTree ORDER BY (C_CUSTKEY);