持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情
前言
Clickhouse做为一款优秀的数据库,除了用客户端工具去连接使用之外,在开发过程中,我们也需要自己按需去连接客户端,根据业务需求去做一些数据分析与展示。本节会教大家使用Java和Python语言去连接Clickhouse。
正文
Java应用使用JDBC连接Clickhouse
首先我们看下Java应用和Clickhouse的交互架构。
a) 让我们从连接到安装Java的机器上的Unix shell开始,并为我们的最小Java应用程序创建一个项目目录
mkdir ~/hello-clickhouse-java-app
b) 现在我们去下载Java的JDBC依赖
cd ~/hello-clickhouse-java-app
mkdir lib
wget -P lib https://repo1.maven.org/maven2/com/clickhouse/clickhouse-jdbc/0.3.2-patch7/clickhouse-jdbc-0.3.2-patch7-shaded.jar
c) 我们可以用idea或者eclipse去创建一个Java应用,当然,我们也可以直接在服务器上去手动创建,如:
cd ~/hello-clickhouse-java-app\
mkdir -p src/main/java/helloclickhouse\
touch src/main/java/helloclickhouse/HelloClickHouse.java
d) 现在我们用vim命令打开HelloClickhouse.java文件,编写代码
import com.clickhouse.jdbc.*;
import java.sql.*;
import java.util.*;
public class HelloClickHouse {
public static void main(String[] args) throws Exception {
String url = "jdbc:ch://<host>:<port>";
Properties properties = new Properties();
// properties.setProperty("ssl", "true");
// properties.setProperty("sslmode", "NONE");
ClickHouseDataSource dataSource = new ClickHouseDataSource(url, properties);
try (Connection connection = dataSource.getConnection(<username>, <password>);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select * from system.tables limit 10")) {
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
int columns = resultSetMetaData.getColumnCount();
while (resultSet.next()) {
for (int c = 1; c <= columns; c++) {
System.out.print(resultSetMetaData.getColumnName(c) + ":" + resultSet.getString(c) + (c < columns ? ", " : "\n"));
}
}
}
}
}
e) 好啦,现在我们去编译执行
cd ~/hello-clickhouse-java-app\
java -classpath lib/clickhouse-jdbc-0.3.2-patch7-shaded.jar src/main/java/helloclickhouse/HelloClickHouse.java
Python应用使用JDBC连接Clickhouse
Python语言我们需要下载对应的依赖,但是python和clickhouse会存在兼容性,因此,我们需要格外注意这一点,有时候错误不一定是代码问题,而是兼容性问题。
a) 依赖下载
pip install clickhouse-connect
b) 对于兼容性,官方也给到解释了
ClickHouse Connect目前处于测试阶段,只有当前的测试版本受到积极支持。在报告任何问题之前,请更新到最新版本。问题应在GitHub项目中归档。
ClickHouse Connect的未来版本保证在发布时与积极支持的ClickHouse版本兼容(通常是最新的三个稳定版本和两个最新的lts版本
c) 创建一个项目
mkdir python_project
touch HelloClickhouse.py
d) 编写代码,用vim命令打开HelloClickhouse.py
import clickhouse_connect
client = clickhouse_connect.get_client(host='localhost', username='default', password='password')
client.command('CREATE TABLE new_table (key UInt32, value String, metric Float64) ENGINE MergeTree ORDER BY key')
row1 = [1000, 'String Value 1000', 5.233]
row2 = [2000, 'String Value 2000', -107.04]
data = [row1, row2]
client.insert('new_table', data, column_names=['key', 'value', 'metric'])
result = client.query('SELECT max(key), avg(metric) FROM new_table')
print(result.result_set)
需要注意的点是,要使用HTTP(S)连接ClickHouse,我们需要知道以下点:
- 主机和端口:通常,使用TLS时端口为8443,不使用TLS则为8123。
- 数据库名称:开箱即用,有一个名为default的数据库,请使用要连接的数据库的名称。
- 用户名和密码:开箱即用,默认用户名。使用适合您的用例的用户名。
总结
本节主要讲解使用Java语言和Python语言去连接Clickhouse,在生产过程中,我们用Java去做数据分析或者是对外提供接口是比较多的,Python尽管也不错,更多是做为一个分析脚本去写和使用。因此对于一个大数据开发者而言,使用这两种语言去使用Clickhouse都是必要的技能。如有问题,欢迎留言讨论!!!