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


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

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

BlockTabSeparated

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

CSV

Comma separated values (RFC).

字符串值是一個輸出以雙引號谤祖。在一個字符串中的雙引號是一個輸出,作為2個連續(xù)的 雙引號老速。這是所有的轉(zhuǎn)義規(guī)則粥喜。Date 和 DateTime值是輸出以雙引號。Numbers 沒有引號輸出橘券。Fields通過逗號分隔额湘。行通過unix newlines (LF)分隔。

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

數(shù)組序列化到字符串旁舰,然后字符串值是輸出以 雙引號锋华。Tuples 是收窄的,是序列化的(作為單獨的列)箭窜。

在解析過程中毯焕,值能夠被附上或者以引號方式不被附上。同時支持單引或雙引磺樱。特殊情況下纳猫,字符串能夠被顯示婆咸,不帶引號 — 在這種情況下,他們被解析為逗號或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 兼容属百。對于這個目的记劝,一些符號是額外轉(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ù)字是以 雙引號作為輸出族扰,與 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 時)。

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

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

JSONCompact

區(qū)別于 JSON 耕驰,僅在數(shù)據(jù)行中以數(shù)組的形式輸出,不以對象(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

}

此格式僅適用于輸出一個查詢結(jié)果朦肘,并不為了解析。對于INSERT查詢請查看JSONEachRowformat双饥。

JSONEachRow

如果放在SELECT查詢中媒抠,在換行符的 JSON 中顯示數(shù)據(jù)(JSON 對象由 \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ù)據(jù)丟失矩父。值被顯示類似于 JSON 格式锉桑。

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

在 JSON 對象的空格被跳過。在對象之間开睡,有逗號被忽略因苹。對于 Objects,Newline字符串不是一個強制分隔符篇恒。

Native

最有效的格式扶檐。以二進制的格式,通過數(shù)據(jù)塊數(shù)據(jù)被寫入和讀取胁艰。對于每個數(shù)據(jù)塊款筑,行數(shù),列數(shù)蝗茁,列名稱和類型醋虏,數(shù)據(jù)塊中列的部分一個一個被記錄。換句話說哮翘,此格式是“columnar” — 它不能轉(zhuǎn)換列到行颈嚼。這是一個格式被用于本地接口,在服務(wù)器之間交互饭寺,對于使用命令行和C++的客戶端阻课。

你能夠使用這個格式快速生成 dump 文件,dump文件僅通過ClickHouse DBMS被讀取艰匙。它并不與格式本身進行交互限煞。

Null

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

Pretty

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

Pretty格式支持輸出總的值(當(dāng)使用WITH TOTALS )和極值(‘extremes’ 設(shè)置為 1)具练。在這種情況下,總值和極值在主數(shù)據(jù)之后輸出甜无,在單獨的表中扛点。顯示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é)果之間畫出的岂丘,是進一步壓縮的陵究。此格式被用于在命令行的客戶端,以交互的模式奥帘。

PrettyCompactMonoBlock

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

PrettyNoEscapes

有別于Pretty在ANSI序列上沒有使用。對于在瀏覽器中顯示這個格式已旧,它是必要的秸苗,同時使用'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.

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

Numbers以從小到大的方式被寫,確定的長度文虏。例如UInt64花費8字節(jié)侣诺。DateTime被寫UInt32,帶有unix時間戳氧秘。Date 被寫入以?UInt16的方式年鸳,日期值是從1970-01-01開始。字符串被寫入長度是LEB128格式丸相,然后是字符串字節(jié)搔确。FixedString被寫入作為它的字節(jié)。數(shù)組被寫入以LEB128格式灭忠,所有的元素都是順序的膳算。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市弛作,隨后出現(xiàn)的幾起案子涕蜂,更是在濱河造成了極大的恐慌,老刑警劉巖映琳,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件机隙,死亡現(xiàn)場離奇詭異,居然都是意外死亡萨西,警方通過查閱死者的電腦和手機有鹿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谎脯,“玉大人葱跋,你說我怎么就攤上這事〈┮蓿” “怎么了年局?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長咸产。 經(jīng)常有香客問我矢否,道長,這世上最難降的妖魔是什么脑溢? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任僵朗,我火速辦了婚禮赖欣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘验庙。我一直安慰自己顶吮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布粪薛。 她就那樣靜靜地躺著悴了,像睡著了一般。 火紅的嫁衣襯著肌膚如雪违寿。 梳的紋絲不亂的頭發(fā)上湃交,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音藤巢,去河邊找鬼搞莺。 笑死,一個胖子當(dāng)著我的面吹牛掂咒,可吹牛的內(nèi)容都是我干的才沧。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼绍刮,長吁一口氣:“原來是場噩夢啊……” “哼温圆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起孩革,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤捌木,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后嫉戚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刨裆,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年彬檀,在試婚紗的時候發(fā)現(xiàn)自己被綠了帆啃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡窍帝,死狀恐怖努潘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坤学,我是刑警寧澤疯坤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站深浮,受9級特大地震影響压怠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜飞苇,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一菌瘫、第九天 我趴在偏房一處隱蔽的房頂上張望蜗顽。 院中可真熱鬧,春花似錦雨让、人聲如沸雇盖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽崔挖。三九已至,卻和暖如春庵寞,著一層夾襖步出監(jiān)牢的瞬間虚汛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工皇帮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛋辈。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓属拾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親冷溶。 傳聞我的和親對象是個殘疾皇子渐白,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345