UInt8,UInt16屎飘,UInt32妥曲,UInt64,Int8钦购,Int16檐盟,Int32,Int64
固定長(zhǎng)度的整數(shù)押桃,帶或不帶標(biāo)志葵萎。
Float32, Float64
浮點(diǎn)數(shù)就像C語(yǔ)言中的“float”和“double”一樣。與標(biāo)準(zhǔn)SQL相比唱凯,浮點(diǎn)數(shù)支持“inf”羡忘,“-inf”,甚至是“nan”磕昼。請(qǐng)參閱“ORDER BY子句”中有關(guān)排序nans的注釋卷雕。我們不建議在表格中存儲(chǔ)浮點(diǎn)數(shù)。
字符串
任意長(zhǎng)度的字符串票从。長(zhǎng)度不限漫雕。該值可以包含任意字節(jié)集滨嘱,包括空字節(jié)。String類(lèi)型替換了其他DBMS類(lèi)型的VARCHAR蝎亚,BLOB九孩,CLOB和其他類(lèi)型。
編碼
ClickHouse沒(méi)有編碼的概念发框。字符串可以包含一組任意字節(jié)躺彬,這些字節(jié)按原樣存儲(chǔ)和輸出。如果您需要存儲(chǔ)文本梅惯,我們推薦使用UTF-8編碼宪拥。至少,如果您的終端使用UTF-8(如所推薦的)铣减,則可以在不進(jìn)行轉(zhuǎn)換的情況下讀取和寫(xiě)入您的值她君。類(lèi)似地,使用字符串的某些函數(shù)具有單獨(dú)的變體葫哗,這些變體在字符串包含表示UTF-8編碼文本的一組字節(jié)的假設(shè)下工作缔刹。例如,“l(fā)ength”函數(shù)以字節(jié)為單位計(jì)算字符串長(zhǎng)度劣针,而“l(fā)engthUTF8”函數(shù)以Unicode代碼點(diǎn)為單位計(jì)算字符串長(zhǎng)度校镐,假設(shè)值為UTF-8編碼。
FixedString(N)
一個(gè)固定長(zhǎng)度的N個(gè)字節(jié)的字符串(不是字符或代碼點(diǎn))捺典。N必須是嚴(yán)格正數(shù)的自然數(shù)鸟廓。當(dāng)服務(wù)器讀取包含較少字節(jié)的字符串(例如,作為在INSERT查詢(xún)中傳遞的輸入)時(shí)襟己,通過(guò)在右側(cè)附加空字節(jié)引谜,字符串被填充為N個(gè)字節(jié)。當(dāng)服務(wù)器讀取包含更多字節(jié)的字符串時(shí)擎浴,將返回錯(cuò)誤消息员咽。當(dāng)服務(wù)器寫(xiě)入一個(gè)字符串(例如,作為SELECT查詢(xún)的輸出)時(shí)贮预,空字節(jié)不會(huì)從字符串末尾刪除贝室,而是輸出。請(qǐng)注意萌狂,這種行為不同于CHAR類(lèi)型的MySQL行為(其中字符串用空格填充档玻,并且空格被移除以用于輸出)。
Date
一個(gè)Date茫藏。以1970-01-01(無(wú)符號(hào))以來(lái)的天數(shù)存儲(chǔ)在兩個(gè)字節(jié)中误趴。允許在Unix Epoch剛剛開(kāi)始之后將值存儲(chǔ)到編譯階段(目前,日期到2038年务傲,但可能擴(kuò)展到2106)由常量定義的上限凉当。最小值輸出為0000-00-00枣申。
日期存儲(chǔ)沒(méi)有時(shí)區(qū)。
DateTime
日期與時(shí)間看杭。以四個(gè)字節(jié)存儲(chǔ)為Unix時(shí)間戳(無(wú)符號(hào))忠藤。允許將值存儲(chǔ)在與日期類(lèi)型相同的范圍內(nèi)。最小值輸出為0000-00-00 00:00:00楼雹。時(shí)間儲(chǔ)存精度高達(dá)1秒(不閏秒)模孩。
時(shí)區(qū)
帶時(shí)間的日期是從客戶端或服務(wù)器啟動(dòng)時(shí)使用系統(tǒng)的時(shí)區(qū),從文本(分為組成部分)轉(zhuǎn)換為二進(jìn)制和返回贮缅。在文本格式中榨咐,關(guān)于夏令時(shí)的信息丟失。
只支持那些時(shí)間從未與世界標(biāo)準(zhǔn)時(shí)間(UTC)有所不同的時(shí)區(qū)谴供,在您要使用的整個(gè)時(shí)間范圍內(nèi)保持部分小時(shí)數(shù)(無(wú)閏秒)块茁。
因此,在處理文本日期時(shí)(例如桂肌,保存文本轉(zhuǎn)儲(chǔ)時(shí))数焊,請(qǐng)記住夏令時(shí)更改時(shí)可能會(huì)有歧義,如果時(shí)區(qū)更改崎场,則可能會(huì)出現(xiàn)匹配數(shù)據(jù)的問(wèn)題佩耳。
枚舉
Enum8或Enum16。存儲(chǔ)為Int8或Int16的一組枚舉字符串值照雁。例:
Enum8('hello'= 1蚕愤,'world'= 2)
- 這個(gè)數(shù)據(jù)類(lèi)型有兩個(gè)值 - 'hello'和'world'答恶。
該數(shù)值必須在-128..127為Enum8和-32768..32767為Enum16饺蚊。枚舉的每個(gè)成員也必須有不同的數(shù)字⌒ぃ空字符串是一個(gè)有效的值污呼。數(shù)字不需要是連續(xù)的,可以以任何順序包竹。是順序無(wú)關(guān)的燕酷。
在內(nèi)存中,數(shù)據(jù)的存儲(chǔ)方式與數(shù)字類(lèi)型Int8和Int16相同周瞎。以文本格式讀取時(shí)苗缩,讀取字符串并查找相應(yīng)的數(shù)值。如果找不到声诸,則會(huì)拋出異常酱讶。當(dāng)以文本格式寫(xiě)入時(shí),查找存儲(chǔ)的數(shù)字并寫(xiě)出相應(yīng)的字符串彼乌。如果數(shù)字不對(duì)應(yīng)已知的值泻肯,則會(huì)拋出異常渊迁。以二進(jìn)制格式,信息以與Int8和Int16相同的方式保存灶挟。Enum的隱式默認(rèn)值是具有最小數(shù)值的值琉朽。
在ORDER BY,GROUP BY稚铣,IN箱叁,DISTINCT等中,枚舉的行為與數(shù)值類(lèi)似惕医。例如蝌蹂,它們將按照ORDER BY中的數(shù)值進(jìn)行排序。Equal和Compare運(yùn)算符的行為就像他們運(yùn)行在數(shù)值上一樣曹锨,無(wú)感知孤个。
枚舉值不能與數(shù)字進(jìn)行比較,它們必須與字符串進(jìn)行比較沛简。如果字符串比較不是Enum的有效值齐鲤,則會(huì)拋出異常。該IN操作符支持與枚舉的左側(cè)和一組在右側(cè)的字符串椒楣。
大多數(shù)數(shù)字和字符串操作沒(méi)有為Enum值定義给郊,例如,將一個(gè)數(shù)字添加到Enum或?qū)⒁粋€(gè)字符串連接到一個(gè)Enum捧灰。但是淆九,可以使用toString函數(shù)將Enum轉(zhuǎn)換為其字符串值。枚舉值也可以使用toT函數(shù)轉(zhuǎn)換為數(shù)字類(lèi)型毛俏,其中T是數(shù)字類(lèi)型炭庙。當(dāng)T對(duì)應(yīng)于枚舉的基礎(chǔ)數(shù)值類(lèi)型時(shí),此轉(zhuǎn)換為零成本煌寇。
可以使用ALTER將新成員添加到Enum焕蹄。如果唯一的變化是對(duì)數(shù)值的設(shè)定,那么操作幾乎是即時(shí)的阀溶。也可以使用ALTER刪除Enum的成員腻脏。刪除成員只有在表中從未使用刪除的值時(shí)才是安全的。作為一種安全措施银锻,更改先前定義的Enum成員的數(shù)值將引發(fā)異常永品。
使用ALTER,它是可以改變的Enum8到Enum16反之亦然-就像改變INT8到Int16的击纬。
Array(T)
T 類(lèi)型的數(shù)組鼎姐。T型可以是任何類(lèi)型,包括數(shù)組。我們不推薦使用多維數(shù)組症见,因?yàn)樗鼈儾槐缓芎玫闹С郑ɡ缥棺撸藘?nèi)存表之外,你不能在多維數(shù)組中存儲(chǔ)多維數(shù)組)谋作。
元組(T1芋肠,T2,...)
元組不能寫(xiě)入表(除了內(nèi)存表)遵蚜。它們用于臨時(shí)列分組帖池。在查詢(xún)中使用IN表達(dá)式時(shí),可以對(duì)列進(jìn)行分組吭净,并指定lambda函數(shù)的某些形式參數(shù)睡汹。有關(guān)更多信息,請(qǐng)參閱“IN運(yùn)算符”和“高階函數(shù)”寂殉。
元組可以作為運(yùn)行查詢(xún)的結(jié)果輸出囚巴。在這種情況下,對(duì)于JSON *以外的文本格式友扰,括號(hào)中的值用逗號(hào)分隔彤叉。在JSON *格式中,元組輸出為數(shù)組(在方括號(hào)中)村怪。
嵌套的數(shù)據(jù)結(jié)構(gòu)
嵌套(Name1 Type1秽浇,Name2 Type2,...)
嵌套的數(shù)據(jù)結(jié)構(gòu)就像一個(gè)嵌套的表甚负。嵌套數(shù)據(jù)結(jié)構(gòu)的參數(shù) - 列名和類(lèi)型 - 與在CREATE查詢(xún)中的指定方式相同重慢。每個(gè)表的行可以對(duì)應(yīng)于嵌套數(shù)據(jù)結(jié)構(gòu)中的任意數(shù)量的行欠拾。
例如:
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)
此示例聲明了“目標(biāo)”嵌套數(shù)據(jù)結(jié)構(gòu)母廷,其中包含有關(guān)轉(zhuǎn)換的數(shù)據(jù)(達(dá)到的目標(biāo))赐纱。“訪問(wèn)”表中的每一行可以對(duì)應(yīng)于零或任意數(shù)量的轉(zhuǎn)換碰辅。
只支持一個(gè)嵌套級(jí)別懂昂。
在大多數(shù)情況下介时,使用嵌套數(shù)據(jù)結(jié)構(gòu)時(shí)没宾,會(huì)指定其各個(gè)列。為此沸柔,列名用點(diǎn)分隔循衰。這些列組成一個(gè)匹配類(lèi)型的數(shù)組。單個(gè)嵌套數(shù)據(jù)結(jié)構(gòu)的所有列數(shù)組具有相同的長(zhǎng)度褐澎。
例如:
SELECT
Goals.ID,
Goals.EventTime
FROM test.visits
WHERE CounterID = 101500 AND length(Goals.ID) < 5
LIMIT 10
┌─Goals.ID───────────────────────┬─Goals.EventTime──────────────────────────────────┐
│ [1073752,591325,591325]? ? ? ? │ ['2014-03-17 16:38:10','2014-03-17 16:38:48','2014-03-17 16:42:27']? ? ? ? ? ? ? ? ? ? ? │
│ [1073752]? ? ? ? ? ? ? ? ? ? ? │ ['2014-03-17 00:28:25']? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? │
│ [1073752]? ? ? ? ? ? ? ? ? ? ? │ ['2014-03-17 10:46:20']? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? │
│ [1073752,591325,591325,591325] │ ['2014-03-17 13:59:20','2014-03-17 22:17:55','2014-03-17 22:18:07','2014-03-17 22:18:51'] │
│ []? ? ? ? ? ? ? ? ? ? ? ? ? ? │ []? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? │
│ [1073752,591325,591325]? ? ? ? │ ['2014-03-17 11:37:06','2014-03-17 14:07:47','2014-03-17 14:36:21']? ? ? ? ? ? ? ? ? ? ? │
│ []? ? ? ? ? ? ? ? ? ? ? ? ? ? │ []? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? │
│ []? ? ? ? ? ? ? ? ? ? ? ? ? ? │ []? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? │
│ [591325,1073752]? ? ? ? ? ? ? │ ['2014-03-17 00:46:05','2014-03-17 00:46:05']? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? │
│ [1073752,591325,591325,591325] │ ['2014-03-17 13:28:33','2014-03-17 13:30:26','2014-03-17 18:51:21','2014-03-17 18:51:45'] │
└────────────────────────────────┴───────────────────────────────────────────┘
將嵌套數(shù)據(jù)結(jié)構(gòu)視為一組長(zhǎng)度相同的多列數(shù)組是最容易的会钝。
SELECT查詢(xún)可以指定整個(gè)嵌套數(shù)據(jù)結(jié)構(gòu)的名稱(chēng)而不是單個(gè)列的唯一位置是ARRAY JOIN子句。有關(guān)更多信息,請(qǐng)參見(jiàn)“ARRAY JOIN子句”迁酸。例如:
SELECT
Goal.ID,
Goal.EventTime
FROM test.visits
ARRAY JOIN Goals AS Goal
WHERE CounterID = 101500 AND length(Goals.ID) < 5
LIMIT 10
┌─Goal.ID─┬──────Goal.EventTime─┐
│ 1073752 │ 2014-03-17 16:38:10 │
│? 591325 │ 2014-03-17 16:38:48 │
│? 591325 │ 2014-03-17 16:42:27 │
│ 1073752 │ 2014-03-17 00:28:25 │
│ 1073752 │ 2014-03-17 10:46:20 │
│ 1073752 │ 2014-03-17 13:59:20 │
│? 591325 │ 2014-03-17 22:17:55 │
│? 591325 │ 2014-03-17 22:18:07 │
│? 591325 │ 2014-03-17 22:18:51 │
│ 1073752 │ 2014-03-17 11:37:06 │
└─────────┴─────────────────────┘
您不能對(duì)整個(gè)嵌套數(shù)據(jù)結(jié)構(gòu)執(zhí)行SELECT先鱼。您只能明確列出屬于其中的單個(gè)列。
對(duì)于INSERT查詢(xún)奸鬓,應(yīng)該單獨(dú)傳遞嵌套數(shù)據(jù)結(jié)構(gòu)的所有組件列數(shù)組(就像它們是單獨(dú)的列數(shù)組一樣)焙畔。在插入期間,系統(tǒng)檢查它們具有相同的長(zhǎng)度串远。
對(duì)于DESCRIBE查詢(xún)宏多,嵌套數(shù)據(jù)結(jié)構(gòu)中的列以相同的方式單獨(dú)列出。
對(duì)于嵌套數(shù)據(jù)結(jié)構(gòu)中的元素澡罚,ALTER查詢(xún)非常有限伸但。
AggregateFunction(name,types_of_arguments ...)
集合函數(shù)的中間狀態(tài)留搔。要得到它更胖,使用具有“-State”后綴的聚合函數(shù)。有關(guān)更多信息隔显,請(qǐng)參閱“AggregatingMergeTree”函喉。
特殊的數(shù)據(jù)類(lèi)型
特殊數(shù)據(jù)類(lèi)型值不能保存到表中或輸出到結(jié)果中,而是用作運(yùn)行查詢(xún)的中間結(jié)果荣月。
集合
用于IN表達(dá)式的右半部分管呵。
表達(dá)式
用于表示高階函數(shù)中的lambda表達(dá)式。
布爾值
布爾值沒(méi)有單獨(dú)的類(lèi)型哺窄。他們使用UInt8類(lèi)型捐下,限制為值0或1。