ClickHouse REST API(HTTP接口)及Engine引擎的使用

1.访问接口

ClickHouse 自己的 clickhouse-client 使用的是“原生”的 TCP 连接来完成与服务端的交互,而在应用中用它的话,它有实现一个 HTTP 的访问接口,把 SQL 语句通过 HTTP 发送到服务端,就可以得到响应数据了(其实不用担心效率问题,数仓场景下,这种传输成本相较于大数据量下的聚合计算挑战,直接就忽略吧)。

默认配置下, HTTP 的服务是在 8123 端口上的,直接访问的话,可以得到一个 ok 的响应。(如果要外部访问,记得把配置中的 listen_host 加一个 0.0.0.0 )。

HTTP 服务,查询的话, GET 或 POST 都可以,修改和创建,只能用 POST :

echo 'CREATE TABLE t (a UInt8) ENGINE = Memory' | POST 'http://1xx.1x.0.x:8123/'
echo 'insert into t (a) values (10)' | POST 'http://1xx.1x.0.x:8123/'
GET "http://1xx.1x.0.x:8123?query=select * from t"
echo 'drop table t' | POST 'http://1xx.1x.xx.xx:8123/'

访问地址中,可以通过请求参数,或者头,来指定一些环境配置项,比如 database ,用户名密码什么的。

  • database ,数据库
  • user , 登录用户
  • password , 登录密码
  • https://clickhouse.yandex/reference_en.html#Settings 其它配置项
username="default"
password=""
ip="172.16.xxx.xx:8123/"
tablename="xxtest"
#create table with crul
#echo 'create table'+ $tablename +'with crul' +$username:$password@$ip/
echo 'CREATE TABLE '$tablename'(dt Date,dp String,id String, name String) ENGINE = Memory' | curl $username:$password@$ip -d @-

用户名和密码,也可以通过 X-ClickHouse-User 和 X-ClickHouse-Key 这两个头来设置与传递。

2. 查询语言

ClickHouse 中有两种类型的解析器, full parser 和 data format parser ,前者是一个完整的 SQL 解析器,后者是一个高性能的流解析器。当语句被发到 ClickHouse 时,默认配置下前 1 MB 字节的数据会使用 full parser 来处理,剩下的数据就交给 data format parser了,所以,像 insert 这类语句,即使整个语句再长,也不会有问题。

语法细节,整体上跟 MySQL 是一样的,当然, ClickHouse 在一些地方有自己特别实现。比如,对于别名 Synonyms , ClickHouse 中的限制就少很多:

select ((select 1) as n), n

2.1. CREATE TABLE

建表语句除了基本形式外,还有两个扩展形式。这是基本形式,如果引擎支持索引的话,索引可以在 ENGINE 的地方额外设置。其中ENGINE字段后面解析

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [db.]name
(
 name1 [type1] [DEFAULT | MATERIALIZED | ALIAS expr1],
 name2 [type2] [DEFAULT | MATERIALIZED | ALIAS expr2],
 ...
) ENGINE = engine

第一种扩展形式,可以创建一个跟指定表完全一样的表,但是可以更换不同的引擎。

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [db.]name AS [db2.]name2 [ENGINE = engine]
第二种形式是“建表并填充”,表字段会自动根据  SELECT  的返回内容设置,并且,返回内容会作为新表内容填充进去。
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [db.]name ENGINE = engine AS SELECT ...

2.2. 默认值

默认值 的处理方面, ClickHouse 中,默认值总是有的,如果没有显示式指定的话,会按字段类型处理:NULLs 是不支持的。

  • 数字类型, 0 。
  • 字符串,空字符串。
  • 数组,空数组。
  • 日期, 0000-00-00 。
  • 时间, 0000-00-00 00:00:00 。

同时,在字段类型方面,如果没有明确指定字段类型,但是指定了默认值,则默认值表达式的返回值类型,作为字段类型。如果即指定了字段类型,也指定了默认值表达式,那么对开默认值表达式的结果,相当于会有一个类型转换。

2.3. 物化列

指定 MATERIALIZED 表达式,即将一个列作为 物化列 处理了,这意味着这个列的值不能从 insert 语句获取,是自己按照某种表达式计算出来的。同时, 物化列 也不会出现在 select * 的结果中,但是他会被计算并存储在数据库中(物化),其语法如下:

create table t (a MATERIALIZED (b+1), b UInt16) ENGINE = Memory;
insert into t(b) values (1);
select * from t;
select a, b from t;

2.4. 表达式列

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值