clickhouse版本:21.8.12.1
,Java版本:jdk1.8,Python版本:Python2或者3
Java操作clickhouse
官方文档地址:https://clickhouse.com/docs/zh/interfaces/jdbc
- 需要的pom依赖:
<dependency>
<groupId>ru.yandex.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.3.1-patch</version>
<classifier>shaded</classifier>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
- 获取连接
private static Connection connectionCK = null;
static {
try {
Class.forName("ru.yandex.clickhouse.ClickHouseDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
connectionCK = DriverManager.getConnection("jdbc:clickhouse://192.168.1.1:8123/test");
} catch (SQLException e) {
e.printStackTrace();
}
}
操作跟java操作Mysql类似,默认情况下,clickhouse-server会在8123端口上监控HTTP请求。
- 查询与插入、更新
String sqlCK = "insert into test values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)";
PreparedStatement psCK = null;
psCK = connectionCK.prepareStatement(sqlCK);
for(...) {
psCK.set(...);
psCK.addBatch();
}
// 批量插入
psCK.executeBatch();
由于clickhouse逐条插入,后台需要频繁合并数据文件,效率不高,推荐批量插入,跟java批量插入mysql操作一样。在我们的腾讯云clickhouse上面,逐条插入每秒20条左右,批量插入每秒5万条数据左右。
Python操作clickhouse
- 需要的依赖
from clickhouse_driver import Client
安装用pip命令:
pip install clickhouse_driver
- 获取连接
clientCK = Client(host='192.168.1.2', port=9000,database='test',password='password')
python连接clickhouse用的是tcp协议走的9000端口,这里跟java有点不同。
- DDL / DML
result = clientCK.execute(sql)
如果是查询,结果是[(), ()...],二维数据,最外面一层是list,里面元祖。拿到结果通常要判断一下len(result)
,如果是0,表名结果为空,否则可以进行后续的处理了,避免数组下标越界。
文章评论