您的位置:

ClickHouse数据类型详解

一、整型

1、Int类型

Int的长度可以是8、16、32、64比特。比特数代表了它能存储的整形数值范围。比如,Int8的范围是-128到127,Int16的范围是-32768到32767。

CREATE TABLE IF NOT EXISTS test_int (id Int32, value Int8) ENGINE = Memory;
INSERT INTO test_int (id, value) VALUES 
    (1, -128), (2, 0), (3, 127);

2、UInt类型

与Int类型相比,UInt类型并没有负数,因此它的范围是0到2^(n)-1,其中n是比特数。例如,UInt8的范围是0到255。

CREATE TABLE IF NOT EXISTS test_uint (id Int32, value UInt8) ENGINE = Memory;
INSERT INTO test_uint (id, value) VALUES 
    (1, 0), (2, 127), (3, 255);

二、浮点型

1、Float类型

Float类型是一种单精度浮点数,其长度为32比特。它能够存储大约6到7位的有效数字。

CREATE TABLE IF NOT EXISTS test_float (id Int32, value1 Float32, value2 Float32) ENGINE = Memory;
INSERT INTO test_float (id, value1, value2) VALUES 
    (1, 1.23456789, 1234567.89),
    (2, 1.23400001, 1234567.90),
    (3, 1.23456784, 1234566.89);

2、Double类型

Double类型是一种双精度浮点数,其长度为64比特,能够存储大约15到16位的有效数字。

CREATE TABLE IF NOT EXISTS test_double (id Int32, value1 Float, value2 Float64) ENGINE = Memory;
INSERT INTO test_double (id, value1, value2) VALUES 
    (1, 1.23456789012345, 1234567890.12345),
    (2, 1.234000000001, 1234567890.12346),
    (3, 1.2345678901234, 1234567889.12345);

三、日期和时间型

1、Date类型

Date类型存储日期,长度为16比特。它的取值范围为0000-01-01到9999-12-31。

CREATE TABLE IF NOT EXISTS test_date (id Int32, value Date) ENGINE = Memory;
INSERT INTO test_date (id, value) VALUES 
    (1, toDate('2020-01-01')), 
    (2, toDate('2021-12-31')), 
    (3, toDate('2022-02-01'));

2、DateTime类型

DateTime类型存储日期和时间,长度为32比特。它的取值范围为1970-01-01 00:00:00到2105-12-31 23:59:59。

CREATE TABLE IF NOT EXISTS test_datetime (id Int32, value DateTime) ENGINE = Memory;
INSERT INTO test_datetime (id, value) VALUES 
    (1, toDateTime('2020-01-01 12:30:00')), 
    (2, toDateTime('2021-12-31 23:59:59')), 
    (3, toDateTime('2022-02-01 01:30:30'));

四、字符串和二进制型

1、String类型

String类型存储字符串,长度不超过2^30字节。在ClickHouse中,String类型的底层是使用Variable-length encoding(可变长度编码)来实现的。

CREATE TABLE IF NOT EXISTS test_string (id Int32, value String) ENGINE = Memory;
INSERT INTO test_string (id, value) VALUES 
    (1, 'Hello, world!'), 
    (2, '中文测试'), 
    (3, '1234567890');

2、FixedString类型

FixedString类型是固定长度的字符串类型,长度在定义表时即可确定。因为长度是固定的,所以FixedString类型的存储比String类型的更紧凑。

CREATE TABLE IF NOT EXISTS test_fixedstring (id Int32, value FixedString(5)) ENGINE = Memory;
INSERT INTO test_fixedstring (id, value) VALUES 
    (1, 'Hello'), 
    (2, 'World'), 
    (3, '12345');

3、Tuple类型

Tuple类型用于存储具有不同类型的数据的元组。Tuple的长度可以是不同的,而且还可以嵌套起来,实现复杂的数据结构。

CREATE TABLE IF NOT EXISTS test_tuple (id Int32, value Tuple(Int32, String)) ENGINE = Memory;
INSERT INTO test_tuple (id, value) VALUES 
    (1, (1, 'Hello')), 
    (2, (2, 'World')), 
    (3, (3, 'ClickHouse'));

4、Array类型

Array类型用于存储具有相同类型的数据的数组,长度可以是不同的。

CREATE TABLE IF NOT EXISTS test_array (id Int32, value Array(String)) ENGINE = Memory;
INSERT INTO test_array (id, value) VALUES 
    (1, ['hello', 'world', '!']), 
    (2, ['Click', 'House']), 
    (3, []);

5、Nullable类型

Nullable类型用于存储可空类型的数据,即数据中可能存在空值。在ClickHouse中,Nullable类型只用于基本类型和Date、DateTime和String类型。

CREATE TABLE IF NOT EXISTS test_nullable (id Int32, value Nullable(String)) ENGINE = Memory;
INSERT INTO test_nullable (id, value) VALUES 
    (1, 'hello'), 
    (2, NULL), 
    (3, 'world');

6、LowCardinality类型

LowCardinality类型用于在存储无序的字符串类型时,优化字典压缩效率。当一个字符串类型的值只有几种取值时,使用LowCardinality类型可以让查询变得更快。

CREATE TABLE IF NOT EXISTS test_lowcardinality (id Int32, value LowCardinality(String)) ENGINE = Memory;
INSERT INTO test_lowcardinality (id, value) VALUES 
    (1, 'hello'), 
    (2, 'ClickHouse'), 
    (3, 'world');

五、其他类型

1、IPv4类型

IPv4类型用于存储IPv4地址。

CREATE TABLE IF NOT EXISTS test_ipv4 (id Int32, ip IPv4) ENGINE = Memory;
INSERT INTO test_ipv4 (id, ip) VALUES 
    (1, toIPv4('192.168.1.1')), 
    (2, toIPv4('172.16.0.1')), 
    (3, toIPv4('10.0.0.1'));

2、UUID类型

UUID类型用于存储UUID(Universally Unique Identifier,通用唯一识别码)。

CREATE TABLE IF NOT EXISTS test_uuid (id Int32, uuid UUID) ENGINE = Memory;
INSERT INTO test_uuid (id, uuid) VALUES 
    (1, '5405b6f2-36c3-11eb-adc1-0242ac120002'), 
    (2, 'ccaa0c47-36c3-11eb-adc1-0242ac120002'), 
    (3, 'ec42737a-36c3-11eb-adc1-0242ac120002');
以上就是ClickHouse的数据类型的详细介绍,包括整型、浮点型、日期时间型、字符串和二进制型、其他类型。在使用ClickHouse时,需要根据实际情况选用合适的数据类型来存储数据,以便提高查询和存储效率。