ClickHouse 数据格式介绍


数据格式

数据格式决定数据怎样被给定 (通过服务器写作为输出) 到你,在SELECTs之后, 同时它怎样被接收 (通过服务器读作为输入) 对于INSERTs 操作.

BlockTabSeparated

数据不能被写通过行,只能通过列和数据块。每个数据块由部分列组成,每个数据块被写入到单独的行。这个值是 Tab 分隔的。一个列部分的最后的值跟着一个换行符,而不是 Tab 键。数据块通过一个 双换行符被分隔。规则剩下的部分与TabSeparated格式相同。此格式仅适合一个查询的输出,而不是解析。

CSV

Comma separated values (RFC).

字符串值是一个输出以双引号。在一个字符串中的双引号是一个输出,作为2个连续的 双引号。这是所有的转义规则。Date 和 DateTime值是输出以双引号。Numbers 没有引号输出。Fields通过逗号分隔。行通过unix newlines (LF)分隔。

数组有如下方法的输出:

数组序列化到字符串,然后字符串值是输出以 双引号。Tuples 是收窄的,是序列化的(作为单独的列)。

在解析过程中,值能够被附上或者以引号方式不被附上。同时支持单引或双引。特殊情况下,字符串能够被显示,不带引号 — 在这种情况下,他们被解析为逗号或newline (CR or LF)。与 RFC 相反,在解析字符串方面,首尾的空格和 Tab 键被忽略。在分隔符上,Unix (LF), Windows (CR LF) 或者 Mac OS Classic (LF CR)变量都被支持。

CSV 格式支持总输出,非常类似于TabSeparated格式。

CSVWithNames

也包含头, 类似TabSeparatedWithNames。

JSON

输出数据作为 JSON 格式。除了数据表之外,它也可以输出列名和类型,和一些额外的信息—如输入行的总大小,行的总数量,如果输出没有LIMIT关键字。例如:

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 兼容。对于这个目的,一些符号是额外转义符: 斜杠 / 被转义为 \/; 替代换行为 U+2028 和 U+2029, 在一些浏览器上是不能用的, 被转义为 uXXXX-序列. ASCII 控制字符被转义: 分别为退格, form feed, line feed, carriage return, 和 水平 Tab 键 \b,\f,\n,\r, 和 \ 剩下的字节从 00-1F,使用 uXXXX-序列. 无效的 UTF-8 序列 被更改为替换字符�, 输出文本由有效的UTF-8 序列组成. UInt64 和 Int64 数字是以 双引号作为输出,与 JavaScript 兼容。

rows- 输出行的总大小.

rows_before_limit_at_least- 行的最小数没有 LIMIT 关键字。查询中不包含 LIMIT。

如果查询包含 GROUP BY,rows_before_limit_at_least 将是没有LIMIT条件的准确行数。

totals- 总值 (当使用 WITH TOTALS 时)。

extremes- 极限值 (当极限值设置为 1).

此格式是仅适用于 输出一个查询结果, 并不是为了解析. 查看 JSONEachRow 格式, 为了插入 INSERT 查询。

JSONCompact

区别于 JSON ,仅在数据行中以数组的形式输出,不以对象(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

}

此格式仅适用于输出一个查询结果,并不为了解析。对于INSERT查询请查看JSONEachRowformat。

JSONEachRow

如果放在SELECT查询中,在换行符的 JSON 中显示数据(JSON 对象由 \n进行分隔)。如果放在INSERT查询中,期望这种数据类型作为输入。

{"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序列。在行中有任意的字节数。在格式化的时候,避免数据丢失。值被显示类似于 JSON 格式。

在INSERT查询中,JSON 数据以任意的列顺序(JSON 键值对儿)。当此列的默认值被插入时,也有可能忽略这个值。当使用JSONEachRow格式时,复杂的默认值并没有提供,当忽略一个列时,它的值将是0,或者是依赖它的类型的空字符串。

在 JSON 对象的空格被跳过。在对象之间,有逗号被忽略。对于 Objects,Newline字符串不是一个强制分隔符。

Native

最有效的格式。以二进制的格式,通过数据块数据被写入和读取。对于每个数据块,行数,列数,列名称和类型,数据块中列的部分一个一个被记录。换句话说,此格式是“columnar” — 它不能转换列到行。这是一个格式被用于本地接口,在服务器之间交互,对于使用命令行和C++的客户端。

你能够使用这个格式快速生成 dump 文件,dump文件仅通过ClickHouse DBMS被读取。它并不与格式本身进行交互。

Null

没有输出。然后,查询是被处理的,当使用命令行客户端时,数据被传输到客户端。这个被用于测试,包括生产级测试环境。很明显,此格式仅适合输出一个查询结果,而不是解析。

Pretty

写数据作为一个Unicode表,也使用ANSI序列,在终端设置颜色。一个表的格被画出来,每个行在终端有2行。每个结果数据块作为一个单独的表输出。数据块是输出,没有缓冲结果(缓冲在预计算所有值的可见宽度是有用的),为了避免在终端 dump 太多的数据,只有最初的10000行被打印出来。如果数据的行数大于10,000,则将打印出显示最初的10000行。此格式仅适合输出一个查询结果,而不是解析。

Pretty格式支持输出总的值(当使用WITH TOTALS )和极值(‘extremes’ 设置为 1)。在这种情况下,总值和极值在主数据之后输出,在单独的表中。显示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

区别于Pretty, grid 是在行和结果之间画出的,是进一步压缩的。此格式被用于在命令行的客户端,以交互的模式。

PrettyCompactMonoBlock

有别于PrettyCompact,上到10000行被缓冲起来。然后输出作为一个单行,不是通过数据块。

PrettyNoEscapes

有别于Pretty在ANSI序列上没有使用。对于在浏览器中显示这个格式,它是必要的,同时使用'watch'命令行工具。

例如:

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

你能够使用HTTP接口,显示在浏览器中。

PrettyCompactNoEscapes

相同.

PrettySpaceNoEscapes

相同.

PrettySpace

与PrettyCompact有区别,被使用替代 grid:

RowBinary

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

在二进制格式中通过行写入数据。行和值顺序被列出,不需要分割符。此格式不如 Native 格式高效,它是基于行的。

Numbers以从小到大的方式被写,确定的长度。例如UInt64花费8字节。DateTime被写UInt32,带有unix时间戳。Date 被写入以 UInt16的方式,日期值是从1970-01-01开始。字符串被写入长度是LEB128格式,然后是字符串字节。FixedString被写入作为它的字节。数组被写入以LEB128格式,所有的元素都是顺序的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343