有時(shí)我們需要快速查詢分析文件數(shù)據(jù),正常流程需要在數(shù)據(jù)庫中創(chuàng)建表,然后利用工具或編碼導(dǎo)入數(shù)據(jù),這時(shí)才能在數(shù)據(jù)庫中查詢分析。利用ClickHouse文件引擎可以快速查詢文件數(shù)據(jù)。本文首先介紹ClickHouse文件引擎,然后介紹如何快速實(shí)現(xiàn)查詢數(shù)據(jù)文件的方案。
ClickHouse 文件引擎
文件表引擎在文件中保存數(shù)據(jù),支持的數(shù)據(jù)格式有:CSV, JSON, XML 等,詳細(xì)內(nèi)容可參考官網(wǎng)文檔。
典型應(yīng)用場景為:
- 從ClickHouse導(dǎo)出數(shù)據(jù)至文件
- 對數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換
- 通過編輯文件更新ClickHouse表數(shù)據(jù)
File表引擎用法
語法如下:
File(Format)
Format 參數(shù)制定一種有效的文件格式。為了執(zhí)行select 查詢,格式必須支持輸入格式,同樣為了insert查詢,需支持輸出。支持的格式類型可參考官網(wǎng)文檔。大部分格式同時(shí)支持輸入和輸出格式,但部分格式僅支持其中之一,如 MySQLDump 僅支持輸入,不支持輸出。
ClickHouse 不允許指定文件路徑,因?yàn)槲募窂绞窃诜?wù)端配置文件path參數(shù)指定。
當(dāng)實(shí)用上面語法創(chuàng)建表時(shí),則會在指定文件夾中創(chuàng)建空的子目錄。寫入數(shù)據(jù)時(shí),會在子目錄中生成data.Format文件。我們可以在服務(wù)端文件系統(tǒng)中手動創(chuàng)建該子目錄,然后ATTACH命令鏈接表信息,也可以從文件中查詢數(shù)據(jù)。但不建議采用該方式,因?yàn)镃lickHouse不跟蹤外部數(shù)據(jù)變化。
舉例
創(chuàng)建 表:file_engine_table,格式為TabSeparated,即數(shù)據(jù)用tab分隔,就是tsv文件格式。
CREATE TABLE file_engine_table (name String, value UInt32) ENGINE=File(TabSeparated)
ClickHouse 缺省在該目錄下創(chuàng)建子目錄: /var/lib/clickhouse/data/default/file_engine_table
.
下面手動創(chuàng)建數(shù)據(jù)文件 /var/lib/clickhouse/data/default/file_engine_table/data.TabSeparated
:
$ cat data.TabSeparated
one 1
two 2
查詢數(shù)據(jù)
SELECT * FROM file_engine_table
┌─name─┬─value─┐
│ one │ 1 │
│ two │ 2 │
└──────┴───────┘
ClickHouse-local工具用法
在clickhouse-local工具,文件引擎除了文件格式參數(shù),還可以指定文件路徑參數(shù)。默認(rèn)輸入/輸出流可以使用數(shù)字或人類可讀的名稱來指定,例如0或stdin, 1或stdout??梢愿鶕?jù)附加的引擎參數(shù)或文件擴(kuò)展名(gz、br或xz)讀寫壓縮文件。
$ echo -e "1,2\n3,4" | clickhouse-local -q "CREATE TABLE table (a Int64, b Int64) ENGINE = File(CSV, stdin); SELECT a, b FROM table; DROP TABLE table"
其他說明
-
可以并行執(zhí)行多個(gè)
SELECT
查詢, 但INSERT
查詢彼此互斥需等待前面操作完成. -
支持通過
INSERT
查詢創(chuàng)建新文件. -
如果文件已存在,
INSERT
操作會追加新的內(nèi)容. -
雖然支持表分區(qū),但不建議使用,也不會增加查詢效率
-
不支持操作
ALTER
SELECT ... SAMPLE
- Indices
- Replication
關(guān)于默認(rèn)設(shè)置
- engine_file_empty_if_not_exists - allows to select empty data from a file that doesn’t exist. Disabled by default.
- engine_file_truncate_on_insert - allows to truncate file before insert into it. Disabled by default.
- engine_file_allow_create_multiple_files - allows to create a new file on each insert if format has suffix. Disabled by default.
- engine_file_skip_empty_files - allows to skip empty files while reading. Disabled by default.
-
storage_file_read_method - method of reading data from storage file, one of:
read
,pread
,mmap
. The mmap method does not apply to clickhouse-server (it’s intended for clickhouse-local). Default value:pread
for clickhouse-server,mmap
for clickhouse-local.
上傳文件直接分析
通過上節(jié)內(nèi)容,我們指定文件表引擎就是在固定路徑下創(chuàng)建子目錄,然后在該子目錄中創(chuàng)建對應(yīng)文件(插入數(shù)據(jù))。我們的需求是快速查詢分析數(shù)據(jù)文件,如csv文件,用戶上傳完就可以分析。
實(shí)現(xiàn)步驟:
-
需要一些參數(shù),如表名稱和描述(英文名和中文名),
-
用戶上傳csv文件
- 解析csv文件(讀取第一行作為字段名稱,最好為英文命名,讀取第二行數(shù)據(jù)判斷數(shù)據(jù)類型),如果沒有標(biāo)題行,則自動命名為F1,F2…
- 使用文件表引擎語法創(chuàng)建表,引用上一步中的參數(shù)信息
- 在元數(shù)據(jù)中插入表和字段信息,用于自助查詢分析場景
- 在該表中插入csv文件數(shù)據(jù),動態(tài)生成insert語句。
-
查詢該表,也可以執(zhí)行一些統(tǒng)計(jì)查詢語句。文章來源:http://www.zghlxwxcb.cn/news/detail-637173.html
總結(jié)
本文介紹了ClickHouse文件引擎的概念和使用方法。利用文件引擎我們快速實(shí)現(xiàn)對數(shù)據(jù)文件的查詢統(tǒng)計(jì)分析。文章來源地址http://www.zghlxwxcb.cn/news/detail-637173.html
到了這里,關(guān)于用ClickHouse 文件表引擎快速查詢分析文件數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!