结合官方文档,做了一些实例php,java,go,python
一,phpclickhouse,非官方插件
1,安装插件
composer require smi2/phpclickhouse
2,php代码
<?php
require 'vendor/autoload.php';
$config = [
'host' => '10.0.10.23',
'port' => '8123',
'username' => 'tanktest',
'password' => '123456'
];
$db = new ClickHouseDB\Client($config);
$db->database('netjoytest1');
$statement = $db->select('SELECT * FROM tank1_all order by id desc LIMIT 1');
print_r($statement->fetchOne());
3,运行结果
zhangying test$ php ck.php
Array
(
[id] => 6
[name] => tank
[age] => 0
[create_time] => 2021-08-23 14:21:30
)
二,clickhouse-jdbc,clickhouse官方库
1,修改pom.xml
<dependency>
<groupId>ru.yandex.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.3.1</version>
</dependency>
测试代码用的框架是springboot
2,java测试代码
package tank.test.springboot;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
public class ck {
private static Connection connection = null;
public static void main(String[] args) throws SQLException {
try {
Class.forName("ru.yandex.clickhouse.ClickHouseDriver");
String url = "jdbc:clickhouse://10.0.10.23:8123/netjoytest1";
String user = "tanktest";
String password = "123456";
connection = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select * from tank1_all limit 1");
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
while (resultSet.next()) {
for (int i = 1; i <= columnCount; i++) {
System.out.println(metaData.getColumnName(i) + ":" + resultSet.getString(i));
}
}
}
}
3,运行结果
=========省略============
16:54:28.570 [main] DEBUG org.apache.http.headers - http-outgoing-0 << X-ClickHouse-Summary: {"read_rows":"0","read_bytes":"0","written_rows":"0","written_bytes":"0","total_rows_to_read":"0"}
16:54:28.570 [main] DEBUG org.apache.http.impl.execchain.MainClientExec - Connection can be kept alive for 300000 MILLISECONDS
16:54:28.571 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection [id: 0][route: {}->http://10.0.10.23:8123] can be kept alive for 300.0 seconds
16:54:28.571 [main] DEBUG org.apache.http.impl.conn.DefaultManagedHttpClientConnection - http-outgoing-0: set socket timeout to 0
16:54:28.571 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection released: [id: 0][route: {}->http://10.0.10.23:8123][total kept alive: 1; route allocated: 1 of 500; total allocated: 1 of 10000]
id:2
name:tank
age:0
create_time:2021-08-23 14:21:30
断开与目标 VM 的连接,地址:'127.0.0.1:60371', transport: 'socket'
进程已结束,退出代码 0
三,clickhouse-driver 非clickhouse官方库
1,安装clickhouse-driver
pip install clickhouse-driver
2,python测试代码
#!/usr/bin/env python
from clickhouse_driver import Client
client = Client(host='10.0.10.23', database='netjoytest1', user='tanktest', password='123456')
a = client.execute('select * from tank1_all limit 1')
print(a)
3,运行结果
/usr/local/bin/python2.7 /Applications/PyCharm.app/Contents/helpers/pydev/pydevd.py --multiproc --qt-support=auto --client 127.0.0.1 --port 61549 --file /Users/zhangying/PycharmProjects/test/ck.py pydev debugger: process 34569 is connecting Connected to pydev debugger (build 192.7142.42) [(2, u'tank', 0, datetime.datetime(2021, 8, 23, 14, 21, 30))] 进程已结束,退出代码 0
四,clickhouse-go clickhouse官方库
1,安装clickhouse-go
go get -u github.com/ClickHouse/clickhouse-go //官方库 go get -u github.com/jmoiron/sqlx //装这个是为了下面运行代码用
2,go代码
package main
import (
_ "github.com/ClickHouse/clickhouse-go"
"github.com/jmoiron/sqlx"
"log"
)
func main() {
var tcpinfo = "tcp://10.0.10.23:9000?username=tanktest&password=123456&database=netjoytest1&read_timeout=10&write_timeout=20&alt_hosts=10.0.10.24:9000"
connect, err := sqlx.Open("clickhouse", tcpinfo)
if err != nil {
log.Fatal(err)
}
var items []struct {
Id uint8 `db:"id"`
Name string `db:"name"`
Age uint8 `db:"age"`
Create_time string `db:"create_time"`
}
if err := connect.Select(&items, "select * from tank1_all order by id desc limit 2"); err != nil {
log.Fatal(err)
}
for _, item := range items {
log.Printf("id: %d, name: %s, age: %d, create_time: %s", item.Id, item.Name, item.Age, item.Create_time)
}
}
注意这里的端口是9000,不是8123
3,运行结果
GOROOT=/usr/local/Cellar/go/1.14/libexec #gosetup GOPATH=/Users/zhangying/go #gosetup /usr/local/Cellar/go/1.14/libexec/bin/go build -o /private/var/folders/xf/v0p6y_p961z0k86r6n0fm5x00000gn/T/___go_build_awesomeProject awesomeProject #gosetup /private/var/folders/xf/v0p6y_p961z0k86r6n0fm5x00000gn/T/___go_build_awesomeProject #gosetup 2021/08/25 18:18:09 id: 6, name: tank, age: 0, create_time: 2021-08-23T14:21:30+08:00 2021/08/25 18:18:09 id: 5, name: tank, age: 0, create_time: 2021-08-23T14:21:30+08:00 Process finished with exit code 0
注意,除了php外,其他的代码都是在ide中调试执行
转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/clickhouse/2527.html