HTTP接口使您可以通过任何编程语言在任何平台上使用云数据库ClickHouse,您将其用于Java和Perl以及Shell脚本,Perl、Python和Go也可以使用HTTP接口。HTTP接口比本机接口受到更多限制,但是具有更好的兼容性。clickhouse-server 侦听的HTTP端口默认情况下是8123。
如果进行不带参数的GET请求,它将返回200响应代码和http_server_default_response默认值“ Ok”中定义的字符串,末尾有换行符。参数可以URL参数query发送或者以POST请求方式发送,或在“ query”参数中发送查询的开头,然后在POST中发送其余查询(在后面解释为什么这样做的必要性)。在发送大型查询时,请注意URL的大小限制为16 KB。如果成功,您将在响应正文中收到200响应代码和结果。 如果发生错误,您将在响应正文中收到响应代码500和一个错误描述文本。
使用GET方法时,设置为“只读”。换句话说,对于修改数据的查询,只能使用POST方法。可以在POST正文或URL参数中发送查询本身。默认情况下,服务器设置中注册的数据库用作默认数据库即default,可以在表名称之前使用点来指定数据库。
身份验证
可以通过以下三种方式之一指定用户名和密码进行登录验证:
- 使用HTTP基本身份验证。
$ echo 'SELECT 1' | curl 'http://user:password@your-ip:8123/' -d @-
- 在URL参数中使用user 和password指定,使用database参数指定数据库。
$ echo 'SELECT 1' | curl 'http://your-ip:8123/?user=user&password=password' -d @-
- 在HTTP请求头中通过“ X-ClickHouse-User”和“ X-ClickHouse-Key”指定用户名和密码。
$ echo 'SELECT 1' | curl -H 'X-ClickHouse-User: user' -H 'X-ClickHouse-Key: your-password' 'http://your-ip:8123/' -d @-
使用示例
- 创建表。
$ echo 'CREATE TABLE t (a UInt8) ENGINE = Memory' | curl 'http://your-ip:8123/' --data-binary @-
- 插入数据。
$ echo 'INSERT INTO t VALUES (1),(2),(3)' | curl 'http://your-ip:8123/' --data-binary @-
- 指定数据格式。
$ echo '(7),(8),(9)' | curl 'http://your-ip:8123/?query=INSERT%20INTO%20t%20FORMAT%20Values' --data-binary @-
- 读取数据,注意返回值可能按照乱序排列。
$ curl 'http://your-ip:8123/?query=SELECT%20a%20FROM%20t'
7
8
9
10
11
12
1
2
3
4
5
6
- 删除表。
$ echo 'DROP TABLE t' | curl 'http://your-ip:8123/' --data-binary @-