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