一、整型
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時,需要根據實際情況選用合適的數據類型來存儲數據,以便提高查詢和存儲效率。
原創文章,作者:TVFAL,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/370161.html