13_clickhouse,Merge引擎,File引擎,External Data引擎,External Data引擎,Null Engine,URL引擎,Memory、Set、Buffer
13.Merge引擎
13.1.Merge引擎
13.2.案例
14.File引擎
14.1.File引擎
14.2.案例
15.External Data引擎
15.1.External Data引擎
16.Null Engine
16.1.Null Engine
16.2.案例
17.URL引擎
17.1.URL引擎
18.其他引擎
18.1.其他引擎:Memory、Set、Buffer
18.2.案例
Memory引擎
Set引擎
Buffer引擎
13.Merge引擎
13.1.Merge引擎
根據匹配表名的正則表達式,從任意數量的表中同時讀取數據。
Merge引擎的表本身不存儲數據。
讀取是自動并行化的。
讀取時按需使用索引。
指定表引擎:
ENGINE = Merge(dbname, table_reg_expression)
參數: 數據庫名稱、匹配表名的正則表達式
示例: Merge(hits,’^WatchLog’)
從虛擬列_table獲取讀取數據的表名稱。
13.2.案例
1.創建表
DROP TABLE WatchLog_old; CREATE TABLE WatchLog_old(date Date, UserId Int64, EventType String, Cnt UInt64) ENGINE=MergeTree PARTITION BY date ORDER BY (UserId, EventType);INSERT INTO WatchLog_old VALUES ('2018-01-01', 1, 'hit', 3);DROP TABLE WatchLog_new; CREATE TABLE WatchLog_new(date Date, UserId Int64, EventType String, Cnt UInt64) ENGINE=MergeTree PARTITION BY date ORDER BY (UserId, EventType);INSERT INTO WatchLog_new VALUES ('2018-01-02', 2, 'hit', 3);2.創建Merge引擎表:
DROP TABLE WatchLog; CREATE TABLE WatchLog as WatchLog_old ENGINE=Merge(currentDatabase(), '^WatchLog');3.查看數據
xxxx2 :) select * from WatchLog_new;SELECT * FROM WatchLog_new┌───────date─┬─UserId─┬─EventType─┬─Cnt─┐ │ 2018-01-02 │ 2 │ hit │ 3 │ └────────────┴────────┴───────────┴─────┘1 rows in set. Elapsed: 0.007 sec. xxxx2 :) select * from WatchLog_old;SELECT * FROM WatchLog_old┌───────date─┬─UserId─┬─EventType─┬─Cnt─┐ │ 2018-01-01 │ 1 │ hit │ 3 │ └────────────┴────────┴───────────┴─────┘1 rows in set. Elapsed: 0.005 sec. xxxx2 :) select * from WatchLog;SELECT * FROM WatchLog┌───────date─┬─UserId─┬─EventType─┬─Cnt─┐ │ 2018-01-02 │ 2 │ hit │ 3 │ └────────────┴────────┴───────────┴─────┘ ┌───────date─┬─UserId─┬─EventType─┬─Cnt─┐ │ 2018-01-01 │ 1 │ hit │ 3 │ └────────────┴────────┴───────────┴─────┘2 rows in set. Elapsed: 0.007 sec. xxxx2 :)4.虛擬列
xxxx2 :) select _table,UserId FROM WatchLog;SELECT _table,UserId FROM WatchLog┌─_table───────┬─UserId─┐ │ WatchLog_new │ 2 │ └──────────────┴────────┘ ┌─_table───────┬─UserId─┐ │ WatchLog_old │ 1 │ └──────────────┴────────┘2 rows in set. Elapsed: 0.006 sec. xxxx2 :)14.File引擎
14.1.File引擎
File表引擎按照支持格式(TabSeparated、CSV等),將數據保存文件中。
使用場景:
指定表引擎:
ENGINE = File(Format)
Format參數指定了文件格式。
ClickHouse不支持為File引擎指定文件系統路徑。
當使用File(Format)創建表時,它會在該文件夾中創建空子目錄。
當數據寫入該表時,它將數據寫入子目錄下的文件data.Format文件中。
14.2.案例
1.創建File引擎的表
CREATE TABLE file_engine_table (name String, value UInt32) ENGINE=File(CSV);默認情況下,ClickHouse將創建文件夾:/var/lib/clickhouse/data/default/file_engine_table。
2.插入數據
insert into file_engine_table values('one', 1); insert into file_engine_table values('two', 2);3.查詢數據
SELECT * FROM file_engine_table;數據默認寫入文件:
/var/lib/clickhouse/data/default/file_engine_table/data.CSV。4.手動修改磁盤文件,新增記錄:
[root@xxxx2 ~]# cd /var/lib/clickhouse/data/default/file_engine_table [root@xxxx2 file_engine_table]# ls data.CSV[root@xxxx2 file_engine_table]# vim data.CSV,最終有如下結果:
"one",1 "two",2 "two",35.查詢數據
xxxx2 :) select * from file_engine_table;SELECT * FROM file_engine_table┌─name─┬─value─┐ │ one │ 1 │ │ two │ 2 │ │ two │ 3 │ └──────┴───────┘3 rows in set. Elapsed: 0.005 sec. xxxx2 :)15.External Data引擎
15.1.External Data引擎
將外部數據發送至ClickHouse的server。數據存放在臨時表中,用于查詢(例如IN操作)。
外部數據可以通過非交互式的命令行客戶端或HTTP接口上傳。
如果需要對大量外部數據運行多個查詢,最好提前將數據上傳到數據庫,而不要使用此功能。
命令行客戶端格式:–external --file=… [–name=…] [–format=…] [–types=…|–structure=…]
–external : 標記外部數據的開始。
–file : 文件的路徑或者”-”。”-”表示stdin,只能從stdin檢索個表。
(以下選項可選)
–name : 表的名稱,如果省略,使用默認名稱_data。
–format :文件中數據的格式。默認值:TabSeparated。
–types和–structure 這兩個參數只需要指定其中之一。
–types : 逗號分隔的列分類的列表。例如:UInt64,String,URL String。定義列名稱和類型。
HTTP接口:外部數據以multipart/form-data格式傳遞。每個表作為單獨的文件傳輸。表名取自文 件名。“query_string"傳遞參數"name_format”、“name_types"和"name_structure”,其中"name" 是表名,默認為文件名。
16.Null Engine
16.1.Null Engine
寫入Null引擎表時,數據被忽略。從Null引擎的表讀取時,響應為空。但是,可以在Null表上創建實例化視圖。因此,寫入表的數據將最終出現在視圖中。
指定表引擎:
ENGINE = File(Format)
16.2.案例
create database test; use test; DROP TABLE IF EXISTS src_null; DROP TABLE IF EXISTS m_view_sum;//創建Null引擎的表 CREATE TABLE src (id String, value UInt32) ENGINE = Null;//創建物化視圖 CREATE MATERIALIZED VIEW m_view_sum ENGINE = SummingMergeTree() order by id AS SELECT id, sum(value) as value FROM src group by id;//插入數據 insert into src values('id001', 1),('id002', 33),('id003', 36); insert into src values('id001', 2),('id002', 17),('id003', 24);//查看數據 select * from m_view_sum; optimize table m_view_sum; select * from m_view_sum; xxxx2 :) select * from m_view_sum;SELECT * FROM m_view_sum┌─id────┬─value─┐ │ id001 │ 2 │ │ id002 │ 17 │ │ id003 │ 24 │ └───────┴───────┘ ┌─id────┬─value─┐ │ id001 │ 1 │ │ id002 │ 33 │ │ id003 │ 36 │ └───────┴───────┘6 rows in set. Elapsed: 0.012 sec. xxxx2 :) select * from m_view_sum;SELECT * FROM m_view_sum┌─id────┬─value─┐ │ id001 │ 2 │ │ id002 │ 17 │ │ id003 │ 24 │ └───────┴───────┘ ┌─id────┬─value─┐ │ id001 │ 1 │ │ id002 │ 33 │ │ id003 │ 36 │ └───────┴───────┘6 rows in set. Elapsed: 0.012 sec. xxxx2 :) optimize table m_view_sum;OPTIMIZE TABLE m_view_sumOk.0 rows in set. Elapsed: 0.005 sec. xxxx2 :) select * from m_view_sum;SELECT * FROM m_view_sum┌─id────┬─value─┐ │ id001 │ 3 │ │ id002 │ 50 │ │ id003 │ 60 │ └───────┴───────┘3 rows in set. Elapsed: 0.005 sec. xxxx2 :)17.URL引擎
17.1.URL引擎
管理遠程HTTP/HTTPS服務器上的數據,此引擎類似于File引擎。
可以進行并行讀寫。
指定表引擎:
ENGINE=URL(URL, Format) URL必須符合統一資源定位符的結構。指定的URL指向使用HTTP或HTTPS的服務器。 Format為ClickHouse支持的格式。 INSERT和SELECT操作分別轉換為POST和GET請求,為了處理POST請求,遠程服務器必須支持分塊 傳輸編碼。 可以使用max_http_get_redirects設置限制HTTP GET重定向躍點的最大數量。
18.其他引擎
18.1.其他引擎:Memory、Set、Buffer
Memory引擎 :數據以未壓縮的形式存儲在RAM中。Server重啟,數據將從表中消失。讀和寫操作不會互相阻塞。不支持索引。讀取時并行化的。該引擎僅用于測試。
Set:Set引擎的數據使用位于RAM中, 它專用于IN運算符的右側。檢索數據的唯一辦法是在IN運算符的右半部分使用它。啟動server時,Set表引擎的數據將加載到RAM。
Buffer : 當寫入Buffer引擎的表時,數據先寫入內存,然后周期性地刷到另外一張表(可稱為目標表)。讀取操作是同時從緩沖區和另外一張表同時讀取數據。Buffer引擎限制很多,在極少情況下才會使用。
18.2.案例
1.Memory引擎
drop table memory_demo; create table memory_demo (id Int8) ENGINE=Memory; insert into memory_demo values(1);xxxx2 :) select * from memory_demo;SELECT * FROM memory_demo┌─id─┐ │ 1 │ └────┘1 rows in set. Elapsed: 0.007 sec. xxxx2 :)2.Set引擎
//創建Set引擎的表 drop table set_demo; create table set_demo (id Int8) ENGINE=Set;//插入數據 insert into set_demo values(1); insert into set_demo values(2); insert into set_demo values(1);3.Buffer引擎
示例:
Buffer(database, table, num_layers, min_time, max_time, min_rows, max_rows, min_bytes, max_bytes)
引擎參數:
database : 數據庫名稱。也可以使用一個返回字符串的常量表達式,例如:currentDatabase()。
table : 數據刷新的目標表。
num_layers : 并行的層數。在物理上, 該表將表示為num_layers個獨立的緩沖區。
min_time, max_time, min_rows, max_rows, min_bytes, and max_bytes :從緩沖區刷新數據的條件。如果滿足所有min條件或滿足至少一個max條件,則從緩沖區刷新數據并將其寫入目標表。
min_time,max_time : 從第一次寫入緩沖區起以秒為單位的時間條件。
min_rows,max_rows : 緩沖區行數的條件。
min_bytes,max_bytes : 緩沖區字節數的條件。
A.創建目標表
drop table t_target; create table t_target(id String, name String) ENGINE=MergeTree order by id;B.創建buffer表
drop table t_buffer; CREATE TABLE t_buffer AS t_target ENGINE = Buffer(currentDatabase(), t_target, 16, 10, 100, 5, 1000000, 10000000, 100000000);說明,最少等待10秒,最多等待100秒。上面的各各參數的含義可以從上面Buffer定義中找到。
C: 往buffer表插入數據
D: 查看表數據
select * from t_buffer; select * from t_target;結果顯示:
剛插入數據后查詢到的結果是:
總結
以上是生活随笔為你收集整理的13_clickhouse,Merge引擎,File引擎,External Data引擎,External Data引擎,Null Engine,URL引擎,Memory、Set、Buffer的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 12_VersionedCollapsi
- 下一篇: 歌曲爱的诱惑(爱的诱惑全集电视剧)