數(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格式灭忠,所有的元素都是順序的膳算。