https://github.com/blackrez/chdb-purego
alternative go binding to chdb (clickhouse on memory) using go
https://github.com/blackrez/chdb-purego
chdb clickhouse golang purego
Last synced: 9 months ago
JSON representation
alternative go binding to chdb (clickhouse on memory) using go
- Host: GitHub
- URL: https://github.com/blackrez/chdb-purego
- Owner: blackrez
- License: apache-2.0
- Created: 2025-02-11T13:35:07.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-02-11T13:58:41.000Z (over 1 year ago)
- Last Synced: 2025-02-11T14:35:33.319Z (over 1 year ago)
- Topics: chdb, clickhouse, golang, purego
- Language: Go
- Homepage:
- Size: 13.7 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# non-official go binding for chDB (using purego)
If you are looking for the official golang, it's available at
https://github.com/chdb-io/chdb-go
This go binding don't use cgo for bind chdb.
## Motivations
My first motivation was to learn purego and facilitate the distribution and usage of the chdb binding.
Feel free to fork or open an issue.
## Installation
You need to download and decompress libchb.so on your system.
The download links are on the release page of chdb :
https://github.com/chdb-io/chdb/releases/tag/v3.0.0
```
linux-aarch64-libchdb.tar.gz
linux-x86_64-libchdb.tar.gz
macos-arm64-libchdb.tar.gz
macos-x86_64-libchdb.tar.gz
```
The module looks the lib to this path
```
"/usr/local/lib/libchdb.so",
"/opt/homebrew/lib/libchdb.so",
```
or use `CHDB_LIB_PATH` as an environement variable.
## Basic usage
Install the go module
Like the API of chdb, it has 2 methods
```
package main
import (
"fmt"
"github.com/blackrez/chdb-purego"
)
func main() {
conn, err := chdb.Connect(":memory:")
if err != nil {
panic(err)
}
defer conn.Close()
q := `
SELECT
floor(randNormal(100, 5)) AS k,
count(*) AS c,
FROM numbers(10) GROUP BY k ORDER BY k ASC
`
result := conn.Query(q, "JSON")
defer result.Free()
fmt.Println(string(result.Data))
}
```
Then run
```
CHDB_LIB_PATH="/$HOME/chdb-purego/libchdb.so" go run main.go
```
```
(base) nabil in ~/project/chdb-purego/example λ CGO_ENABLED=0 CHDB_LIB_PATH="/Users/nabil/project/chdb-purego/libchdb.so" go run main.go
{
"meta":
[
{
"name": "k",
"type": "Float64"
},
{
"name": "c",
"type": "UInt64"
}
],
"data":
[
{
"k": 91,
"c": 1
},
{
"k": 94,
"c": 1
},
{
"k": 99,
"c": 3
},
{
"k": 102,
"c": 1
},
{
"k": 104,
"c": 1
},
{
"k": 106,
"c": 3
}
],
"rows": 6,
"statistics":
{
"elapsed": 0.0226755,
"rows_read": 0,
"bytes_read": 0
}
}
```
## Roadmap :
The objective is to add the support of chproto https://github.com/ClickHouse/ch-go/tree/main/proto for an easier data exchange between go and clickhouse.
- [ ] more tests
- [ ] add chproto support
- [ ] better handling lib path
- [ ] test (and support) persistent sessions
- [ ] add sql interface
- [ ] add optionnal go-arrow binding