chDB go bindings and chDB cli.
libchdb
chdb-go
go install github.com/chdb-io/chdb-go@latest
chdb-go
with or without persistent --path
$GOPATH/bin/chdb-go
chdb-go
make build
chdb-go
with or without persistent --path
./chdb-go
./chdb-go "SELECT 123"
./chdb-go "SELECT 123" JSON
./chdb-go # enter interactive mode, but data will be lost after exit
./chdb-go --path /tmp/chdb # interactive persistent mode
chdb-io/chdb-go [main] » ./chdb-go
Enter your SQL commands; type 'exit' to quit.
:) CREATE DATABASE IF NOT EXISTS testdb;
package main
import (
"fmt"
"os"
"path/filepath"
"github.com/chdb-io/chdb-go/chdb"
)
func main() {
// Stateless Query (ephemeral)
result, err := chdb.Query("SELECT version()", "CSV")
if err != nil {
fmt.Println(err)
}
fmt.Println(result)
tmp_path := filepath.Join(os.TempDir(), "chdb_test")
defer os.RemoveAll(tmp_path)
// Stateful Query (persistent)
session, _ := chdb.NewSession(tmp_path)
defer session.Cleanup()
_, err = session.Query("CREATE DATABASE IF NOT EXISTS testdb; " +
"CREATE TABLE IF NOT EXISTS testdb.testtable (id UInt32) ENGINE = MergeTree() ORDER BY id;")
if err != nil {
fmt.Println(err)
return
}
_, err = session.Query("USE testdb; INSERT INTO testtable VALUES (1), (2), (3);")
if err != nil {
fmt.Println(err)
return
}
ret, err := session.Query("SELECT * FROM testtable;")
if err != nil {
fmt.Println(err)
} else {
fmt.Println(ret)
}
}
package main
import (
"database/sql"
"log"
_ "github.com/chdb-io/chdb-go/chdb/driver"
)
func main() {
db, err := sql.Open("chdb", "")
if err != nil {
log.Fatal(err)
}
rows, err := db.Query(`select COUNT(*) from url('https://datasets.clickhouse.com/hits_compatible/athena_partitioned/hits_0.parquet')`)
if err != nil {
log.Fatalf("select fail, err: %s", err)
}
cols, err := rows.Columns()
if err != nil {
log.Fatalf("get result columns fail, err: %s", err)
}
log.Printf("result columns: %v", cols)
defer rows.Close()
var count int
for rows.Next() {
err := rows.Scan(&count)
if err != nil {
log.Fatalf("scan fail, err: %s", err)
}
log.Printf("count: %d", count)
}
}