ClickHouse REST APIHTTP接口及Engine引擎的使用文档格式.docx
- 文档编号:12959300
- 上传时间:2022-10-01
- 格式:DOCX
- 页数:13
- 大小:19.78KB
ClickHouse REST APIHTTP接口及Engine引擎的使用文档格式.docx
《ClickHouse REST APIHTTP接口及Engine引擎的使用文档格式.docx》由会员分享,可在线阅读,更多相关《ClickHouse REST APIHTTP接口及Engine引擎的使用文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
|POST'
http:
//1xx.1x.0.x:
8123/'
insertintot(a)values(10)'
GET"
8123?
query=select*fromt"
droptablet'
//1xx.1x.xx.xx:
访问地址中,可以通过请求参数,或者头,来指定一些环境配置项,比如
database
,用户名密码什么的。
database,数据库
user,登录用户
password,登录密码
https:
//clickhouse.yandex/reference_en.html#Settings其它配置项
username="
default"
password="
"
ip="
172.16.xxx.xx:
8123/"
tablename="
xxtest"
#createtablewithcrul
#echo'
createtable'
+$tablename+'
withcrul'
+$username:
$password@$ip/
CREATETABLE'
$tablename'
(dtDate,dpString,idString,nameString)ENGINE=Memory'
|curl$username:
$password@$ip-d@-
用户名和密码,也可以通过
X-ClickHouse-User
和
X-ClickHouse-Key
这两个头来设置与传递。
2.查询语言
中有两种类型的解析器,
fullparser
dataformatparser
,前者是一个完整的SQL解析器,后者是一个高性能的流解析器。
当语句被发到
时,默认配置下前1MB字节的数据会使用
来处理,剩下的数据就交给
dataformatparser了,所以,像
insert
这类语句,即使整个语句再长,也不会有问题。
语法细节,整体上跟MySQL是一样的,当然,
在一些地方有自己特别实现。
比如,对于别名
Synonyms
,
中的限制就少很多:
select((select1)asn),n
2.1.CREATETABLE
建表语句除了基本形式外,还有两个扩展形式。
这是基本形式,如果引擎支持索引的话,索引可以在
ENGINE
的地方额外设置。
其中ENGINE字段后面解析
CREATE[TEMPORARY]TABLE[IFNOTEXISTS][db.]name
(
name1[type1][DEFAULT|MATERIALIZED|ALIASexpr1],
name2[type2][DEFAULT|MATERIALIZED|ALIASexpr2],
...
)ENGINE=engine
第一种扩展形式,可以创建一个跟指定表完全一样的表,但是可以更换不同的引擎。
CREATE[TEMPORARY]TABLE[IFNOTEXISTS][db.]nameAS[db2.]name2[ENGINE=engine]
第二种形式是“建表并填充”,表字段会自动根据
SELECT
的返回内容设置,并且,返回内容会作为新表内容填充进去。
CREATE[TEMPORARY]TABLE[IFNOTEXISTS][db.]nameENGINE=engineASSELECT...
2.2.默认值
默认值
的处理方面,
中,默认值总是有的,如果没有显示式指定的话,会按字段类型处理:
NULLs
是不支持的。
数字类型,
0
。
字符串,空字符串。
数组,空数组。
日期,
0000-00-00
时间,
0000-00-0000:
00:
00
同时,在字段类型方面,如果没有明确指定字段类型,但是指定了默认值,则默认值表达式的返回值类型,作为字段类型。
如果即指定了字段类型,也指定了默认值表达式,那么对开默认值表达式的结果,相当于会有一个类型转换。
2.3.物化列
指定
MATERIALIZED
表达式,即将一个列作为
物化列
处理了,这意味着这个列的值不能从
语句获取,是自己按照某种表达式计算出来的。
同时,
也不会出现在
select*
的结果中,但是他会被计算并存储在数据库中(物化),其语法如下:
createtablet(aMATERIALIZED(b+1),bUInt16)ENGINE=Memory;
insertintot(b)values
(1);
select*fromt;
selecta,bfromt;
2.4.表达式列
ALIAS
表达式列某方面跟物化列相同,就是它的值不能从
语句获取。
不同的是,
是会真正保存数据(这样查询时不需要再计算),而
表达式列
不会保存数据(这样查询时总是需要计算),只是在查询时返回表达式的结果。
createtablet(aALIAS(b+1),bUInt16)ENGINE=Memory;
3.引擎
引擎就是在创建表时,最后的那个
选项指定的东西,这部分我觉得算是
最精华的部分了,它很多针对数据仓库场景的设计与优化,是基于特定的引擎实现的,特别是
MergeTree
这一类引擎。
3.1.TinyLog
最简单的一种引擎,每一列保存为一个文件,里面的内容是压缩过的,不支持索引。
这种引擎没有并发控制,所以,当你需要在读,又在写时,读会出错。
并发写,内容都会坏掉。
所以,它的应用场景,基本上就是那种只写一次,然后就是只读的场景。
同时,它也不适用于处理量大的数据,官方推荐,使用这种引擎的表最多100万行的数据。
因为这种引擎的实现非常简单,所以当你有很多很多的小表数据要处理时,使用它是比较合适的,最基本的,它在磁盘上的文件量很少,读一列数据只需要打开一个文件就好了。
在
Yandex.Metrica
产品中,这种引擎用于小批量的中间数据处理上。
createtablet(aUInt16,bString)ENGINE=TinyLog;
insertintot(a,b)values(1,'
abc'
);
上面创建一张表t,它有2个字段,然后插入了一条数据。
之后,我们在保存数据的目录(默认在/var/lib/clickhouse/data/default/t)可以看到这样的目录结构:
├──a.bin
├──b.bin
└──sizes.json
a.bin
b.bin
是压缩过的对应的列的数据,
sizes.json
中记录了每个
*.bin
文件的大小:
{"
yandex"
:
a%2Ebin"
size"
28"
},"
b%2Ebin"
30"
}}}
3.2.Log
这种引擎跟
TinyLog
基本一致,它的改进点,是加了一个
__marks.mrk
文件,里面记录了每个数据块的偏移,这种做的一个用处,就是可以准确地切分读的范围,从而使用并发读取成为可能。
但是,它是不能支持并发写的,一个写操作会阻塞其它读写操作。
Log
不支持索引,同时因为有一个
的冗余数据,所以在写入数据时,一旦出现问题,这个表就废了。
同
差不多,它适用的场景也是那种写一次之后,后面就是只读的场景,临时数据用它保存也可以。
3.3.Memory
内存引擎,数据以未压缩的原始形式直接保存在内存当中,服务器重启数据就会消失。
可以并行读,读写互斥锁的时间也非常短。
不支持索引,简单查询下有非常非常高的性能表现。
一般用到它的地方不多,除了用来测试,就是在需要非常高的性能,同时数据量又不太大(上限大概1亿行)的场景。
系统运行时也会在
外部数据条件
GLOBALIN
等机制中用到它。
3.4.Merge
一个工具引擎,本身不保存数据,只用于把指定库中的指定多个表链在一起。
这样,读取操作可以并发执行,同时也可以利用原表的索引,但是,此引擎不支持写操作。
指定引擎的同时,需要指定要链接的库及表,库名可以使用一个表达式,表名可以使用正则表达式指定。
createt1(idUInt16,nameString)ENGINE=TinyLog;
createt2(idUInt16,nameString)ENGINE=TinyLog;
createt3(idUInt16,nameString)ENGINE=TinyLog;
insertintot1(id,name)values(1,'
first'
insertintot2(id,name)values(2,'
xxxx'
insertintot3(id,name)values(12,'
iamint3'
createtablet(idUInt16,nameString)ENGINE=Merge(currentDatabase(),'
^t'
上面先建了
t1
t2
t3
,三个表,然后用
Merge
引擎的
t
表再把它们链接起来。
这样,查询的时候,就能同时取到三个表的数据了:
select_table,*fromtorderbyiddesc'
|POST'
//1xx.xx.0.xx:
8123'
select
中,
_table
这个列,是因为使用了
多出来的一个的一个
虚拟列
,它表示原始数据的来源表,它不会出现在
showtable
的结果当中,同时,
不会包含它。
3.5.Distributed
前面说的
可以看成是单机版的
Distributed
,而真正的
具备跨服务器能力,当然,机器地址的配置依赖配置文件中的信息。
与
类似,
也是通过一个逻辑
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ClickHouse REST APIHTTP接口及Engine引擎的使用 APIHTTP 接口 Engine 引擎 使用