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

您所在的位置:网站首页 restful接口调用速度 ClickHouse REST API(HTTP接口)及Engine引擎的使用

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

2024-01-16 20:25| 来源: 网络整理| 查看: 265

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. 表达式列


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3