ClickHouse 數(shù)據(jù)格式介紹


數(shù)據(jù)格式

數(shù)據(jù)格式?jīng)Q定數(shù)據(jù)怎樣被給定 (通過服務(wù)器寫作為輸出) 到你,在SELECTs之后, 同時(shí)它怎樣被接收 (通過服務(wù)器讀作為輸入) 對(duì)于INSERTs 操作.

BlockTabSeparated

數(shù)據(jù)不能被寫通過行,只能通過列和數(shù)據(jù)塊。每個(gè)數(shù)據(jù)塊由部分列組成,每個(gè)數(shù)據(jù)塊被寫入到單獨(dú)的行。這個(gè)值是 Tab 分隔的。一個(gè)列部分的最后的值跟著一個(gè)換行符,而不是 Tab 鍵。數(shù)據(jù)塊通過一個(gè) 雙換行符被分隔。規(guī)則剩下的部分與TabSeparated格式相同。此格式僅適合一個(gè)查詢的輸出,而不是解析。

CSV

Comma separated values (RFC).

字符串值是一個(gè)輸出以雙引號(hào)。在一個(gè)字符串中的雙引號(hào)是一個(gè)輸出,作為2個(gè)連續(xù)的 雙引號(hào)。這是所有的轉(zhuǎn)義規(guī)則。Date 和 DateTime值是輸出以雙引號(hào)。Numbers 沒有引號(hào)輸出。Fields通過逗號(hào)分隔。行通過unix newlines (LF)分隔。

數(shù)組有如下方法的輸出:

數(shù)組序列化到字符串,然后字符串值是輸出以 雙引號(hào)。Tuples 是收窄的,是序列化的(作為單獨(dú)的列)。

在解析過程中,值能夠被附上或者以引號(hào)方式不被附上。同時(shí)支持單引或雙引。特殊情況下,字符串能夠被顯示,不帶引號(hào) — 在這種情況下,他們被解析為逗號(hào)或newline (CR or LF)。與 RFC 相反,在解析字符串方面,首尾的空格和 Tab 鍵被忽略。在分隔符上,Unix (LF), Windows (CR LF) 或者 Mac OS Classic (LF CR)變量都被支持。

CSV 格式支持總輸出,非常類似于TabSeparated格式。

CSVWithNames

也包含頭, 類似TabSeparatedWithNames。

JSON

輸出數(shù)據(jù)作為 JSON 格式。除了數(shù)據(jù)表之外,它也可以輸出列名和類型,和一些額外的信息—如輸入行的總大小,行的總數(shù)量,如果輸出沒有LIMIT關(guān)鍵字。例如:

SELECT SearchPhrase, count() AS c FROM test.hits GROUP BY SearchPhrase WITH TOTALS ORDER BY c DESC LIMIT 5 FORMAT JSON

{"meta":[{"name":"SearchPhrase","type":"String"},{"name":"c","type":"UInt64"}],"data":[{"SearchPhrase":"","c":"8267016"},{"SearchPhrase":"интерьер ванной комнаты","c":"2166"},{"SearchPhrase":"яндекс","c":"1655"},{"SearchPhrase":"весна 2014 мода","c":"1549"},{"SearchPhrase":"фриформ фото","c":"1480"}],"totals":{"SearchPhrase":"","c":"8873898"},"extremes":{"min":{"SearchPhrase":"","c":"1480"},"max":{"SearchPhrase":"","c":"8267016"}},"rows":5,"rows_before_limit_at_least":141137}

JSON 與 JavaScript 兼容。對(duì)于這個(gè)目的,一些符號(hào)是額外轉(zhuǎn)義符: 斜杠 / 被轉(zhuǎn)義為 \/; 替代換行為 U+2028 和 U+2029, 在一些瀏覽器上是不能用的, 被轉(zhuǎn)義為 uXXXX-序列. ASCII 控制字符被轉(zhuǎn)義: 分別為退格, form feed, line feed, carriage return, 和 水平 Tab 鍵 \b,\f,\n,\r, 和 \ 剩下的字節(jié)從 00-1F,使用 uXXXX-序列. 無效的 UTF-8 序列 被更改為替換字符?, 輸出文本由有效的UTF-8 序列組成. UInt64 和 Int64 數(shù)字是以 雙引號(hào)作為輸出,與 JavaScript 兼容。

rows- 輸出行的總大小.

rows_before_limit_at_least- 行的最小數(shù)沒有 LIMIT 關(guān)鍵字。查詢中不包含 LIMIT。

如果查詢包含 GROUP BY,rows_before_limit_at_least 將是沒有LIMIT條件的準(zhǔn)確行數(shù)。

totals- 總值 (當(dāng)使用 WITH TOTALS 時(shí))。

extremes- 極限值 (當(dāng)極限值設(shè)置為 1).

此格式是僅適用于 輸出一個(gè)查詢結(jié)果, 并不是為了解析. 查看 JSONEachRow 格式, 為了插入 INSERT 查詢。

JSONCompact

區(qū)別于 JSON ,僅在數(shù)據(jù)行中以數(shù)組的形式輸出,不以對(duì)象(objects)的形式。

{

"meta":

[

{

"name": "SearchPhrase",

"type": "String"

},

{

"name": "c",

"type": "UInt64"

}

],

"data":

[

["", "8267016"],

["bath interiors", "2166"],

["yandex", "1655"],

["spring 2014 fashion", "1549"],

["freeform photo", "1480"]

],

"totals": ["","8873898"],

"extremes":

{

"min": ["","1480"],

"max": ["","8267016"]

},

"rows": 5,

"rows_before_limit_at_least": 141137

}

此格式僅適用于輸出一個(gè)查詢結(jié)果,并不為了解析。對(duì)于INSERT查詢請(qǐng)查看JSONEachRowformat。

JSONEachRow

如果放在SELECT查詢中,在換行符的 JSON 中顯示數(shù)據(jù)(JSON 對(duì)象由 \n進(jìn)行分隔)。如果放在INSERT查詢中,期望這種數(shù)據(jù)類型作為輸入。

{"SearchPhrase":"","count()":"8267016"}

{"SearchPhrase":"bathroom interior","count()":"2166"}

{"SearchPhrase":"yandex","count()":"1655"}

{"SearchPhrase":"spring 2014 fashion","count()":"1549"}

{"SearchPhrase":"free-form photo","count()":"1480"}

{"SearchPhrase":"Angelina Jolie","count()":"1245"}

{"SearchPhrase":"omsk","count()":"1112"}

{"SearchPhrase":"photos of dog breeds","count()":"1091"}

{"SearchPhrase":"curtain design","count()":"1064"}

{"SearchPhrase":"baku","count()":"1000"}

不像 JSON 格式,沒有替換無效的UTF-8序列。在行中有任意的字節(jié)數(shù)。在格式化的時(shí)候,避免數(shù)據(jù)丟失。值被顯示類似于 JSON 格式。

在INSERT查詢中,JSON 數(shù)據(jù)以任意的列順序(JSON 鍵值對(duì)兒)。當(dāng)此列的默認(rèn)值被插入時(shí),也有可能忽略這個(gè)值。當(dāng)使用JSONEachRow格式時(shí),復(fù)雜的默認(rèn)值并沒有提供,當(dāng)忽略一個(gè)列時(shí),它的值將是0,或者是依賴它的類型的空字符串。

在 JSON 對(duì)象的空格被跳過。在對(duì)象之間,有逗號(hào)被忽略。對(duì)于 Objects,Newline字符串不是一個(gè)強(qiáng)制分隔符。

Native

最有效的格式。以二進(jìn)制的格式,通過數(shù)據(jù)塊數(shù)據(jù)被寫入和讀取。對(duì)于每個(gè)數(shù)據(jù)塊,行數(shù),列數(shù),列名稱和類型,數(shù)據(jù)塊中列的部分一個(gè)一個(gè)被記錄。換句話說,此格式是“columnar” — 它不能轉(zhuǎn)換列到行。這是一個(gè)格式被用于本地接口,在服務(wù)器之間交互,對(duì)于使用命令行和C++的客戶端。

你能夠使用這個(gè)格式快速生成 dump 文件,dump文件僅通過ClickHouse DBMS被讀取。它并不與格式本身進(jìn)行交互。

Null

沒有輸出。然后,查詢是被處理的,當(dāng)使用命令行客戶端時(shí),數(shù)據(jù)被傳輸?shù)娇蛻舳恕_@個(gè)被用于測試,包括生產(chǎn)級(jí)測試環(huán)境。很明顯,此格式僅適合輸出一個(gè)查詢結(jié)果,而不是解析。

Pretty

寫數(shù)據(jù)作為一個(gè)Unicode表,也使用ANSI序列,在終端設(shè)置顏色。一個(gè)表的格被畫出來,每個(gè)行在終端有2行。每個(gè)結(jié)果數(shù)據(jù)塊作為一個(gè)單獨(dú)的表輸出。數(shù)據(jù)塊是輸出,沒有緩沖結(jié)果(緩沖在預(yù)計(jì)算所有值的可見寬度是有用的),為了避免在終端 dump 太多的數(shù)據(jù),只有最初的10000行被打印出來。如果數(shù)據(jù)的行數(shù)大于10,000,則將打印出顯示最初的10000行。此格式僅適合輸出一個(gè)查詢結(jié)果,而不是解析。

Pretty格式支持輸出總的值(當(dāng)使用WITH TOTALS )和極值(‘extremes’ 設(shè)置為 1)。在這種情況下,總值和極值在主數(shù)據(jù)之后輸出,在單獨(dú)的表中。顯示PrettyCompact格式:

SELECT EventDate,count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORDER BY EventDate FORMAT PrettyCompact

┌──EventDate─┬───────c─┐

│ 2014-03-17 │ 1406958 │

│ 2014-03-18 │ 1383658 │

│ 2014-03-19 │ 1405797 │

│ 2014-03-20 │ 1353623 │

│ 2014-03-21 │ 1245779 │

│ 2014-03-22 │ 1031592 │

│ 2014-03-23 │ 1046491 │

└────────────┴─────────┘

Totals:

┌──EventDate─┬───────c─┐

│ 0000-00-00 │ 8873898 │

└────────────┴─────────┘

Extremes:

┌──EventDate─┬───────c─┐

│ 2014-03-17 │ 1031592 │

│ 2014-03-23 │ 1406958 │

└────────────┴─────────┘


PrettyCompact

區(qū)別于Pretty, grid 是在行和結(jié)果之間畫出的,是進(jìn)一步壓縮的。此格式被用于在命令行的客戶端,以交互的模式。

PrettyCompactMonoBlock

有別于PrettyCompact,上到10000行被緩沖起來。然后輸出作為一個(gè)單行,不是通過數(shù)據(jù)塊。

PrettyNoEscapes

有別于Pretty在ANSI序列上沒有使用。對(duì)于在瀏覽器中顯示這個(gè)格式,它是必要的,同時(shí)使用'watch'命令行工具。

例如:

watch -n1 "clickhouse-client --query='SELECT * FROM system.events FORMAT PrettyCompactNoEscapes'"

你能夠使用HTTP接口,顯示在瀏覽器中。

PrettyCompactNoEscapes

相同.

PrettySpaceNoEscapes

相同.

PrettySpace

與PrettyCompact有區(qū)別,被使用替代 grid:

RowBinary

This format is less efficient than the Native format, since it is row-based.

在二進(jìn)制格式中通過行寫入數(shù)據(jù)。行和值順序被列出,不需要分割符。此格式不如 Native 格式高效,它是基于行的。

Numbers以從小到大的方式被寫,確定的長度。例如UInt64花費(fèi)8字節(jié)。DateTime被寫UInt32,帶有unix時(shí)間戳。Date 被寫入以?UInt16的方式,日期值是從1970-01-01開始。字符串被寫入長度是LEB128格式,然后是字符串字節(jié)。FixedString被寫入作為它的字節(jié)。數(shù)組被寫入以LEB128格式,所有的元素都是順序的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,778評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,436評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,795評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,993評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,229評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評(píng)論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,687評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,990評(píng)論 2 374