ClickHouse java查询 clickhouse java客户端_数据库

今天的封面很六一,不知道儿童节会收到啥礼物。这段时间断断续续的折腾CH,简单总结起来就是:资料少,文档坑,更新频率蹭蹭蹭。

日常管理来说一般命令行方式就足够了,但是给研发同学使用,没个客户端工具还真不好意思说这是个数据库。

 

ClickHouse提供了两个种接口:

  • HTTP 易于直接使用。
  • 本机TCP 开销较小。

建议使用适当的工具或库来连接,Yandex官方支持以下方式:

  • 命令行客户端
  • JDBC驱动程序
  • ODBC驱动程序
  • C ++客户端库

非官方的第三方库工具:

这个就太多了,支持Java、Python、PHP、Go、C等各种语言的客户端库

下面就一起测试下平时常用的客户端工具,看看这挖掘技术到底哪家强。


# 0 三个默认的端口:

首先看下ClickHouse配置文件,默认对外开放以下端口:

<http_port>8123</http_port>
    <tcp_port>9000</tcp_port>
    <mysql_port>9004</mysql_port>

HTTP方式:

ClickHouse java查询 clickhouse java客户端_ClickHouse java查询_02

clickhouse-client 方式,需要安装官方对应的client才能使用

ClickHouse java查询 clickhouse java客户端_数据库_03

MySQL 方式,目前对很多客户端兼容性都不太好,这里测试一些主流的客户端。先建立一个用于测试的用户:

CREATE USER caihao HOST ANY IDENTIFIED WITH double_sha1_password BY 'caihao';
GRANT ALL ON *.* TO caihao;

!注意:

为了与所有MySQL客户端兼容,建议在配置文件中使用双SHA1密码。

如果使用SHA256密码,某些客户端可能无法进行身份验证。

# 1 MySQL Client:

对版本很挑剔,这里我用的5.7.24版本的MySQL无法进入交互方式:

ClickHouse java查询 clickhouse java客户端_mysql_04

但是后面-e 直接执行查询是可以的。

ClickHouse java查询 clickhouse java客户端_mysql_05

用MariaDB就完全没这种问题

ClickHouse java查询 clickhouse java客户端_ClickHouse java查询_06

# 2 MySQL Workbench

Workbench是Oracle官方开发,本身对于社区版和企业版MySQL支持很好,但对其他非官方版本的就不要指望了。

ClickHouse java查询 clickhouse java客户端_ClickHouse java查询_07

# 3 Navicat 

Navicat 作为开发人员使用最广泛的客户端软件, 对ch也是不支持,迷之报错。

ClickHouse java查询 clickhouse java客户端_redis_08

用HTTP方式同样不行:

ClickHouse java查询 clickhouse java客户端_mysql_09

# 4 DBeaver

免费和开源的 DBeaver ,支持几乎所有的数据库,这当然也包括ch,而且是Yandex官方推荐哦。

ClickHouse java查询 clickhouse java客户端_mysql_10

创建连接,可以在分析数据库中找到ch

ClickHouse java查询 clickhouse java客户端_mysql_11

配置好JCDB方式的连接

ClickHouse java查询 clickhouse java客户端_mysql_12

查看数据库对象和数据没有任何问题。

ClickHouse java查询 clickhouse java客户端_数据库_13

# 5 Tabix

Tabix 也是ch官方推荐的数据库管理工具,他的好处是单独部署一套web服务,用户通过浏览器就可以连接ch数据库,无需额外安装任何客户端,支持SQL语法。

ClickHouse java查询 clickhouse java客户端_ClickHouse java查询_14

安装很简单:

https://tabix.io/doc/Install/

docker部署,3步完成

# 建立镜像:
docker build -t tabix .

# 运行容器:
docker run -d -p 8080:80 spoonest/clickhouse-tabix-web-client

# 或者,加上密码验证更安全:
docker run -d -p 8080:80 -e USER='myuser' -e PASSWORD='mypass' spoonest/clickhouse-tabix-web-client

# 通过浏览器访问:
http://10.0.0.97:8080/#!/login

连接CH,注意用http端口 8123

ClickHouse java查询 clickhouse java客户端_redis_15

这种性冷淡风格,很好。

ClickHouse java查询 clickhouse java客户端_ClickHouse java查询_16

# 6 ProxySQL

既然CH自带的MySQL这也不支持,那也报错,不如干脆不用了。proxysql恰好有支持ch的版本,而且支持SQL,搞一个放前面岂不美哉。 

https://github.com/sysown/proxysql/wiki/ClickHouse-Support

--1. 安装 proxysql

从 https://github.com/sysown/proxysql/releases 下载相应的版本:

wget https://github.com/sysown/proxysql/releases/download/v2.0.10/proxysql-2.0.10-1-clickhouse-centos7.x86_64.rpm

yum localinstall proxysql-2.0.10-1-clickhouse-centos7.x86_64.rpm -y

--2. 启动 proxysql:

proxysql --clickhouse-server

--3. 管理端口连接proxy:(默认管理端口是6032,客户端服务端口是6090。默认的用户名密码都是 admin。)

[root@VM_0_97_centos caihao]# mysql -uadmin -padmin -h127.0.0.1 -P6032


mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.30 (ProxySQL Admin Module)


Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


[admin@127.0.0.1][(none)]> show databases;
+-----+---------------+-------------------------------------+
| seq | name          | file                                |
+-----+---------------+-------------------------------------+
| 0   | main          |                                     |
| 2   | disk          | /var/lib/proxysql/proxysql.db       |
| 3   | stats         |                                     |
| 4   | monitor       |                                     |
| 5   | stats_history | /var/lib/proxysql/proxysql_stats.db |
+-----+---------------+-------------------------------------+
5 rows in set (0.00 sec)


[admin@127.0.0.1][(none)]>

看下clickhouse专属用户表:

[admin@127.0.0.1][(none)]> SHOW CREATE TABLE clickhouse_users\G
*************************** 1. row ***************************
       table: clickhouse_users
Create Table: CREATE TABLE clickhouse_users (
    username VARCHAR NOT NULL,
    password VARCHAR,
    active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1,
    max_connections INT CHECK (max_connections >=0) NOT NULL DEFAULT 10000,
    PRIMARY KEY (username))
1 row in set (0.00 sec)

--4. 配置新用户:

注意:ProxySQL将使用Default用户名和空密码连接到ClickHouse,这里配置的是ProxySQL的用户。

[admin@127.0.0.1][(none)]> INSERT INTO clickhouse_users VALUES ('chproxy','chproxy_Pass123',1,200);
Query OK, 1 row affected (0.00 sec)

将配置加载到运行时和磁盘:

[admin@127.0.0.1][(none)]> LOAD CLICKHOUSE USERS TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)

[admin@127.0.0.1][(none)]> SAVE CLICKHOUSE USERS TO DISK;
Query OK, 0 rows affected (0.04 sec)

--5. 测试下连接:

ClickHouse java查询 clickhouse java客户端_ClickHouse java查询_17

执行各种SQL都很6

ClickHouse java查询 clickhouse java客户端_java_18

ClickHouse java查询 clickhouse java客户端_数据库_19

通过Navicat试试,也没问题。

ClickHouse java查询 clickhouse java客户端_java_20

Workbench 还是不行,设定字符集失败就直接报错。

ClickHouse java查询 clickhouse java客户端_java_21


# 最后总结下这些工具:

  • ClickHouse Client  官方出品,没毛病。
  • DBeaver  支持最好的第三方客户端
  • Tabix  有点简陋,但浏览器访问很方便
  • MySQL Client   <---- 还可以
  • 部分版本不支持官方MySQL接口
  • 加上ProxySQL好很多
  • Navicat    <---- 对付用
  • 不支持MySQL接口
  • 加上ProxySQL支持
  • MySQL Workbench   <---- 离开亲爹啥都不是
  • 不支持MySQL接口
  • 加上ProxySQL也不行

ClickHouse java查询 clickhouse java客户端_redis_22