clickhouse基本數據類型總結

整型

有符號整型(-2n-1~2n-1-1):

  • Int8 - [-128 : 127]
  • Int16 - [-32768 : 32767]
  • Int32 - [-2147483648 : 2147483647]
  • Int64 - [-9223372036854775808 : 9223372036854775807]

無符號整型範圍(0~2n-1):

  • UInt8 - [0 : 255]
  • UInt16 - [0 : 65535]
  • UInt32 - [0 : 4294967295]
  • UInt64 - [0 : 18446744073709551615]

浮點型

  • Float32 - float
  • Float64 – double

布爾型

沒有單獨的類型來存儲布爾值。可以使用 UInt8 類型,取值限制爲 0 或 1。

字符串

  • 變長字符串 String
    字符串可以任意長度的。它可以包含任意的字節集,包含空字節。

  • 定長字符串 FixedString(N)
    固定長度 N 的字符串,N 必須是嚴格的正自然數。當服務端讀取長度小於 N 的字符串時候,通過在字符串末尾添加空字節來達到 N 字節長度。 當服務端讀取長度大於 N 的字符串時候,將返回錯誤消息。
    與String相比,極少會使用FixedString,因爲使用起來不是很方便。

枚舉類型

  • Enum8 用 'String'= Int8 對描述。
  • Enum16 用 'String'= Int16 對描述。

Enum 保存 'string'= integer 的對應關係。在 ClickHouse 中,儘管用戶使用的是字符串常量,但所有含有 Enum 數據類型的操作都是按照包含整數的值來執行。這在性能方面比使用 String 數據類型更有效。
舉例:

#新建一張帶Enum8類型的表:
localhost :) CREATE TABLE  enum_t (  et Enum8('a' = 1, 'b' = 2, 'c' =3)) ENGINE = TinyLog;
localhost :) DESC enum_t ;
┌─name─┬─type─────────────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ et   │ Enum8('a' = 1, 'b' = 2, 'c' = 3) │              │                    │         │                  │                │
└──────┴──────────────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘

#插入數據
localhost :) INSERT INTO enum_t(et) VALUES ('a'),('a'),('b');

#查看
localhost :) SELECT * FROM enum_t ;
┌─et─┐
│ a  │
│ a  │
│ b  │
└────┘

#如果需要看到對應行的數值,則必須將 Enum 值轉換爲整數類型:
localhost :) SELECT CAST(et, 'Int8') FROM enum_t ;
┌─CAST(et, 'Int8')─┐
│                1 │
│                1 │
│                2 │
└──────────────────┘

數據組

  • Array(T)

由 T 類型元素組成的數組。T 可以是任意類型,包含數組類型,但不推薦使用多維數組,ClickHouse 對多維數組的支持有限。
可以使用array()函數和中括號來創建數組

舉例:

#新建兩張帶Array類型的表:
localhost :) CREATE TABLE array_t (arr Array(UInt8)) ENGINE = TinyLog;
localhost :) CREATE TABLE array_ta (arr Array(String)) ENGINE = TinyLog;

#插入數組
localhost :) INSERT INTO array_t VALUES([1,2,3,4,5]),(array(11,22,33,44,55));
localhost :) INSERT INTO array_ta VALUES(['a','b','c']),(array('x','y','z','123'));

#查看結果
localhost :) SELECT * FROM array_t ;
┌─arr──────────────┐
│ [1,2,3,4,5]      │
│ [11,22,33,44,55] │
└──────────────────┘

localhost :) SELECT * FROM array_ta;
┌─arr─────────────────┐
│ ['a','b','c']       │
│ ['x','y','z','123'] │
└─────────────────────┘

元組

  • Tuple(T1, T2, ...)

元組,其中每個元素都有單獨的類型。

舉個例子:

#創建一張帶tuple字段的表:
localhost :) CREATE TABLE tuple_t (ttt Tuple(Int8, String, Array(String), Array(Int8))) ENGINE = TinyLog;

#插入數據
localhost :) INSERT INTO tuple_t VALUES((1, 'a', ['a', 'b', 'c'], [1, 2, 3])),(tuple(11, 'A', ['A', 'B', 'C'], [11, 22, 33]));

#查看數據
localhost :) SELECT * FROM tuple_t ;
┌─ttt───────────────────────────────┐
│ (1,'a',['a','b','c'],[1,2,3])     │
│ (11,'A',['A','B','C'],[11,22,33]) │
└───────────────────────────────────┘

日期

  • Date

用兩個字節存儲,表示從 1970-01-01 (無符號) 到當前的日期值, 最小值輸出爲0000-00-00。

時間戳

  • DateTime

用四個字節(無符號的)存儲 Unix 時間戳,允許存儲與日期類型相同的範圍內的值。最小值爲 0000-00-00 00:00:00,時間戳類型值精確到秒。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章