Clickhouse LowCardinality 数据类型的用法样例

ClickHouse的数据类型中,LowCardinality 用于处理重复度高的数值,特别是对于比较长的字符串类型。

语法

LowCardinality(data_type)

data_type — StringFixedStringDateDateTime, 和数字类型,除了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);