go-clickhouse
所属分类:大数据
开发工具:GO
文件大小:0KB
下载次数:0
上传日期:2018-02-07 14:23:29
上 传 者:
sh-1993
说明: Golang ClickHouse连接器,
(Golang ClickHouse connector,)
文件列表:
.travis.yml (227, 2023-11-24)
LICENSE (1074, 2023-11-24)
cluster.go (857, 2023-11-24)
cluster_test.go (975, 2023-11-24)
conn.go (483, 2023-11-24)
conn_test.go (1034, 2023-11-24)
errors.go (997, 2023-11-24)
errors_test.go (1354, 2023-11-24)
helpers.go (1709, 2023-11-24)
helpers_test.go (2535, 2023-11-24)
marshal.go (4025, 2023-11-24)
marshal_test.go (4240, 2023-11-24)
query.go (1610, 2023-11-24)
query_test.go (3603, 2023-11-24)
transport.go (2475, 2023-11-24)
transport_test.go (3490, 2023-11-24)
# go-clickhouse
# [![Travis status](https://img.shields.io/travis/roistat/go-clickhouse.svg)](https://travis-ci.org/roistat/go-clickhouse) [![Coverage Status](https://img.shields.io/coveralls/roistat/go-clickhouse.svg)](https://coveralls.io/github/roistat/go-clickhouse) [![Go Report](https://goreportcard.com/badge/github.com/roistat/go-clickhouse)](https://goreportcard.com/report/github.com/roistat/go-clickhouse) ![](https://img.shields.io/github/license/roistat/go-clickhouse.svg)
Golang [Yandex ClickHouse](https://clickhouse.yandex/) connector
ClickHouse manages extremely large volumes of data in a stable and sustainable manner.
It currently powers Yandex.Metrica, world’s second largest web analytics platform,
with over 13 trillion database records and over 20 billion events a day, generating
customized reports on-the-fly, directly from non-aggregated data. This system was
successfully implemented at CERN’s LHCb experiment to store and process metadata on
10bn events with over 1000 attributes per event registered in 2011.
## Examples
#### Query rows
```go
conn := clickhouse.NewConn("localhost:8123", clickhouse.NewHttpTransport())
query := clickhouse.NewQuery("SELECT name, date FROM clicks")
iter := query.Iter(conn)
var (
name string
date string
)
for iter.Scan(&name, &date) {
//
}
if iter.Error() != nil {
log.Panicln(iter.Error())
}
```
#### Single insert
```go
conn := clickhouse.NewConn("localhost:8123", clickhouse.NewHttpTransport())
query, err := clickhouse.BuildInsert("clicks",
clickhouse.Columns{"name", "date", "sourceip"},
clickhouse.Row{"Test name", "2016-01-01 21:01:01", clickhouse.Func{"IPv4StringToNum", "192.0.2.192"}},
)
if err == nil {
err = query.Exec(conn)
if err == nil {
//
}
}
```
#### External data for query processing
[See documentation for details](https://clickhouse.yandex/reference_en.html#External%20data%20for%20query%20processing)
```go
conn := clickhouse.NewConn("localhost:8123", clickhouse.NewHttpTransport())
query := clickhouse.NewQuery("SELECT Num, Name FROM extdata")
query.AddExternal("extdata", "Num UInt32, Name String", []byte("1 first\n2 second")) // tab separated
iter := query.Iter(conn)
var (
num int
name string
)
for iter.Scan(&num, &name) {
//
}
if iter.Error() != nil {
log.Panicln(iter.Error())
}
```
## Cluster
Cluster is useful if you have several servers with same `Distributed` table (master). In this case you can send
requests to random master to balance load.
* `cluster.Check()` pings all connections and filters active ones
* `cluster.ActiveConn()` returns random active connection
* `cluster.OnCheckError()` is called when any connection fails
**Important**: You should call method `Check()` at least once after initialization, but we recommend
to call it continuously, so `ActiveConn()` will always return filtered active connection.
```go
http := clickhouse.NewHttpTransport()
conn1 := clickhouse.NewConn("host1", http)
conn2 := clickhouse.NewConn("host2", http)
cluster := clickhouse.NewCluster(conn1, conn2)
cluster.OnCheckError(func (c *clickhouse.Conn) {
log.Fatalf("Clickhouse connection failed %s", c.Host)
})
// Ping connections every second
go func() {
for {
cluster.Check()
time.Sleep(time.Second)
}
}()
```
## Transport options
### Timeout
```go
t := clickhouse.NewHttpTransport()
t.Timeout = time.Second * 5
conn := clickhouse.NewConn("host", t)
```
近期下载者:
相关文件:
收藏者: