结合官方文档,做了一些实例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