1.clickhouse支持常見的數據類型
string ,int,float等等
特殊:
1.string中的-inf是負無窮
inf是正無窮
nan是空值
FixedString(N),類似與mysql中的varchar,可以指定字符串的長度
2.枚舉類型,clickhouse不支持boolean類型,需要使用枚舉來做
包括 Enum8 和 Enum16 類型。Enum 保存 'string'= integer 的對應關系。
Enum8 用 'String'= Int8 對描述。
Enum16 用 'String'= Int16 對描述。
用法演示:
創建一個帶有一個枚舉 Enum8('hello' = 1, 'world' = 2) 類型的列:
CREATE TABLE t_enum
(
x Enum8('hello' = 1, 'world' = 2)
)
ENGINE = TinyLog
這個 x
列只能存儲類型定義中列出的值:'hello'
或'world'
。如果嘗試保存任何其他值,ClickHouse 拋出異常。
:) INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello')
INSERT INTO t_enum VALUES
Ok.
3 rows in set. Elapsed: 0.002 sec.
:) insert into t_enum values('a')
INSERT INTO t_enum VALUES
Exception on client:
Code: 49. DB::Exception: Unknown element 'a' for type Enum8('hello' = 1, 'world' = 2)
從表中查詢數據時,ClickHouse 從 Enum
中輸出字符串值。
SELECT * FROM t_enum
┌─x─────┐
│ hello │
│ world │
│ hello │
└───────┘
如果需要看到對應行的數值,則必須將 Enum
值轉換為整數類型。
SELECT CAST(x, 'Int8') FROM t_enum
┌─CAST(x, 'Int8')─┐
│ 1 │
│ 2 │
│ 1 │
└─────────────────┘
3.數組,tuple,date,還有很多類型,可以去官網上看。
2.表引擎:
1.tinylog:
特點:
- 這個引擎存在磁盤中
- 不支持索引
- 沒有並發控制,但是支持並發(同時讀,同時寫,讀和寫),只能支持同時讀的並發
應用場景:小表,這個表一般只用於查詢,例如國家,省份等
使用方式:創建表的時候指定引擎即可
2.memory
特點:
1.內存引擎,速度快,可以達到每秒10g,官網建議上限1億條數據
2.不支持索引
使用方式:用於測試
3.merge
特點:
1.本身不存儲數據,通過合並其他表的數據來得到自身的數據
4.mergetree(重點)
會自動的合並多個分支,減少了數據的存儲
特點:
- 按照主鍵進行排序
- 可以指定分區
- 可以支持數據副本,保證數據安全性
- 支持數據采樣
索引粒度:每個索引有多少行,默認值是8192
數據片段頭在zk中的存儲方式
使用直接io來操作磁盤合並時所需要的最小數據量,數據小於10g采用緩存io,大於10g采用磁盤io
linux中的io方式:直接io,緩存io
5.replacingmergetree
這個引擎是在mergertree的基礎上,添加了刪除重復數據的功能,該引擎和mergetree的不同之處在於它會刪除
具有相同主鍵的重復項.
ver:版本列
會自動進行數據的合並,但是只會保存最大的版本
6.summingmergertree
會把所有具有相同主鍵的數據指定的列合並為一行,會取最先出現的值。
7.distributed
分布式引擎,本身不存儲數據,但是可以在多個服務器上進行分布式查詢,可以並行讀。
把不同的數據存到不同的機器上。