clickhouse數(shù)據(jù)類型

  1. 整型
    有符號整型:Int8, Int16, Int32, Int64
    無符號整型:UInt8, UInt16, UInt32, UInt64
  2. 浮點數(shù)(Float32, Float64)
    建議盡可能以整數(shù)形式存儲數(shù)據(jù)。
    對浮點數(shù)進(jìn)行計算可能引起四舍五入的誤差。
    浮點計算結(jié)果可能是諸如正無窮大(inf)、負(fù)無窮大(-inf)和"非數(shù)字"(nan)。
SELECT 1 - 0.9 # 0.09999999999999998
SELECT 0.5 / 0 # inf
SELECT -0.5 / 0 # -inf
SELECT 0 / 0 # nan
  1. 有符號的定點數(shù)(Decimal(P, S), Decimal32(S), Decimal64(S), Decimal128(S))
    有符號的定點數(shù),可在加、減和乘法運(yùn)算過程中保持精度。對于除法,最低有效數(shù)字會被丟棄(不舍入)。
    P - 精度。有效范圍:[1:38],決定可以有多少個十進(jìn)制數(shù)字(包括分?jǐn)?shù))。
    S - 規(guī)模。有效范圍:[0:P],決定數(shù)字的小數(shù)部分中包含的小數(shù)位數(shù)。
    在對 Decimal 類型執(zhí)行操作時,數(shù)值可能會發(fā)生溢出。分?jǐn)?shù)中的過多數(shù)字被丟棄(不是舍入的)。整數(shù)中的過多數(shù)字將導(dǎo)致異常。
    檢查溢出會導(dǎo)致計算變慢。如果已知溢出不可能,則可以通過設(shè)置decimal_check_overflow來禁用溢出檢查,在這種情況下,溢出將導(dǎo)致結(jié)果不正確:
  2. 布爾值
    沒有單獨的類型來存儲布爾值??梢允褂?UInt8 類型,取值限制為 0 或 1。
  3. 變長字符串(String)
    字符串可以任意長度的。它可以包含任意的字節(jié)集,包含空字節(jié)。
  4. 定長字符串(FixedString(N))
    固定長度 N 的字符串。N 必須是嚴(yán)格的正自然數(shù)。 當(dāng)服務(wù)端讀取長度小于 N 的字符串時候(例如解析 INSERT 數(shù)據(jù)時),通過在字符串末尾添加空字節(jié)來達(dá)到 N 字節(jié)長度。 當(dāng)服務(wù)端讀取長度大于 N 的字符串時候,將返回錯誤消息。 當(dāng)服務(wù)器寫入一個字符串(例如,當(dāng)輸出 SELECT 查詢的結(jié)果)時,NULL字節(jié)不會從字符串的末尾被移除,而是被輸出。
  5. 通用唯一標(biāo)識符(UUID)
    通用唯一標(biāo)識符(UUID)是用于標(biāo)識記錄的16字節(jié)數(shù)字。
    如果在插入新記錄時未指定UUID列值,則UUID值將填充為零:00000000-0000-0000-0000-000000000000
    要生成UUID值,ClickHouse提供generateUUIDv4()函數(shù)。
select generateUUIDv4() # 29fc209d-eba3-4adf-b7cb-d4600036d10a

UUID數(shù)據(jù)類型不支持算術(shù)運(yùn)算(例如,abs)或聚合函數(shù)(例如sum和avg)。
UUID數(shù)據(jù)類型僅支持String數(shù)據(jù)類型也支持的函數(shù)(例如,min,max和count)。

  1. 日期(Date)
    日期類型,用兩個字節(jié)存儲,表示從 1970-01-01 (無符號) 到當(dāng)前的日期值。
    最小值輸出為0000-00-00。
  2. 時間戳(DateTime)
    時間戳類型。用四個字節(jié)(無符號的)存儲 Unix 時間戳)。允許存儲與日期類型相同的范圍內(nèi)的值。最小值為 0000-00-00 00:00:00。時間戳類型值精確到秒。
  3. 枚舉類型(Enum8, Enum16)
    Enum 保存 'string'= integer 的對應(yīng)關(guān)系。在 ClickHouse 中,盡管用戶使用的是字符串常量,但所有含有 Enum 數(shù)據(jù)類型的操作都是按照包含整數(shù)的值來執(zhí)行。這在性能方面比使用 String 數(shù)據(jù)類型更有效。
    Enum8 用 'String'= Int8 對描述。
    Enum16 用 'String'= Int16 對描述。
CREATE TABLE t_enum
(
    x Enum8('hello' = 1, 'world' = 2)
)
ENGINE = TinyLog
#
INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello')

這個 x 列只能存儲類型定義中列出的值:'hello'或'world'。如果您嘗試保存任何其他值,ClickHouse 拋出異常。

  1. 數(shù)組(Array(T))
    由 T 類型元素組成的數(shù)組。
    T 可以是任意類型,包含數(shù)組類型。 但不推薦使用多維數(shù)組,ClickHouse 對多維數(shù)組的支持有限。
    可以使用array()函數(shù)和中括號來創(chuàng)建數(shù)組
SELECT array(1, 2)
SELECT [1, 2]

如果在元素中存在 NULL或存在 Nullable類型元素,那么數(shù)組的元素類型將會變成 Nullable。
如果 ClickHouse 無法確定數(shù)據(jù)類型,它將產(chǎn)生異常。

  1. 元組(Tuple(T1, T2, ...))
    元組,其中每個元素都有單獨的類型。
SELECT tuple(1,'a')
  1. 缺失值(Nullable(TypeName))
    允許用特殊標(biāo)記NULL表示"缺失值",可以與 TypeName 的正常值存放一起。例如,Nullable(Int8) 類型的列可以存儲 Int8 類型值,而沒有值的行將存儲 NULL。
    對于 TypeName,不能使用復(fù)合數(shù)據(jù)類型 Array和 Tuple。復(fù)合數(shù)據(jù)類型可以包含 Nullable 類型值,例如Array(Nullable(Int8))。
    Nullable 類型字段不能包含在表索引中。
    除非在 ClickHouse 服務(wù)器配置中另有說明,否則 NULL 是任何 Nullable 類型的默認(rèn)值。
    使用 Nullable 幾乎總是對性能產(chǎn)生負(fù)面影響。
 CREATE TABLE t_null(x Int8, y Nullable(Int8)) ENGINE TinyLog
#
INSERT INTO t_null VALUES (1, NULL)
  1. 嵌套(Nested(Name1 Type1, Name2 Type2, ...))
    嵌套數(shù)據(jù)結(jié)構(gòu)類似于嵌套表。嵌套數(shù)據(jù)結(jié)構(gòu)的參數(shù)(列名和類型)與 CREATE 查詢類似。每個表可以包含任意多行嵌套數(shù)據(jù)結(jié)構(gòu)。
    只支持一級嵌套。嵌套結(jié)構(gòu)的列中,若列的類型是數(shù)組類型,那么該列其實和多維數(shù)組是相同的,所以目前嵌套層級的支持很局限(MergeTree 引擎中不支持存儲這樣的列)
    大多數(shù)情況下,處理嵌套數(shù)據(jù)結(jié)構(gòu)時,會指定一個單獨的列。為了這樣實現(xiàn),列的名稱會與點號連接起來。這些列構(gòu)成了一組匹配類型。在同一條嵌套數(shù)據(jù)中,所有的列都具有相同的長度。
    不能對整個嵌套數(shù)據(jù)結(jié)構(gòu)執(zhí)行 SELECT。只能明確列出屬于它一部分列。
CREATE TABLE test.visits
(
    CounterID UInt32,
    StartDate Date,
    Sign Int8,
    IsNew UInt8,
    VisitID UInt64,
    UserID UInt64,
    ...
    Goals Nested
    (
        ID UInt32,
        Serial UInt32,
        EventTime DateTime,
        Price Int64,
        OrderID String,
        CurrencyID UInt32
    ),
    ...
) ENGINE = CollapsingMergeTree(StartDate, intHash32(UserID), (CounterID, StartDate, intHash32(UserID), VisitID), 8192, Sign)
  1. Nothing
    此數(shù)據(jù)類型的唯一目的是表示不是期望值的情況。 所以不能創(chuàng)建一個 Nothing 類型的值。
    例如,文本 NULL 的類型為 Nullable(Nothing)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容