Connect to the Aiven for ClickHouse® service with Go#

To connect to your Aiven for ClickHouse® service with Go, you can use the native protocol or the HTTPS protocol in specific cases. This article provides you with instructions for both scenarios.

Prerequisites#

Go 1.17 or later

Install the ClickHouse Go module#

To install the ClickHouse Go module, run the following command:

go get github.com/ClickHouse/clickhouse-go/v2

Note

If the version of Go is lower than 1.18.4 (visible via go version), you need to install an older version of clickhouse-go. For this purpose, use command go get github.com/ClickHouse/clickhouse-go/v2@v2.2.

Connect with the native protocol#

Identify connection information#

To run the code for connecting to your service, first identify values of the following variables:

Variable

Description

Host

Host for the ClickHouse connection available in the Aiven console: Service Overview > Connection information > ClickHouse native

Port

Port for the ClickHouse connection available in the Aiven console: Service Overview > Connection information > ClickHouse native

Database

Database Name in your the ClickHouse service available in the Aiven console: Service Overview > Connection information > ClickHouse native

Username

User for the ClickHouse connection available in the Aiven console: Service Overview > Connection information > ClickHouse native

Password

Password for the ClickHouse connection available in the Aiven console: Service Overview > Connection information > ClickHouse native

Connect to the service#

Replace the placeholders in the code with meaningful information on your service connection and run the code.

package main
import "fmt"
import "log"
import "crypto/tls"
import "github.com/ClickHouse/clickhouse-go/v2"
func main() {
    host := "HOST"
    native_port := NATIVE_PORT
    database := "DATABASE_NAME"
    username := "USERNAME"
    password := "PASSWORD"
    tls_config := &tls.Config{}
    conn, err := clickhouse.Open(&clickhouse.Options{
        Addr: []string{fmt.Sprintf("%s:%d", host, native_port)},
        Auth: clickhouse.Auth{
            Database: database,
            Username: username,
            Password: password,
        },
        TLS: tls_config,
    })
    if err != nil {
        log.Fatal(err)
    }
    v, err := conn.ServerVersion()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(v)
}

Connect with HTTPS#

Important

The HTTPS connection is supported for the database/SQL API only. By default, connections are established over the native protocol. The HTTPS connection needs to be enabled either by modifying the DSN to include the HTTPS protocol or by specifying the protocol in the connection options.

Identify connection information#

To run the code for connecting to your service, first identify values of the following variables:

Variable

Description

Host

Host for the ClickHouse connection available in the Aiven console: Service Overview > Connection information > ClickHouse HTTPS & JDBC

HttpPort

Port for the ClickHouse connection available in the Aiven console: Service Overview > Connection information > ClickHouse HTTPS & JDBC

Database

Database Name in your the ClickHouse service available in the Aiven console: Service Overview > Connection information > ClickHouse HTTPS & JDBC

Username

User for the ClickHouse connection available in the Aiven console: Service Overview > Connection information > ClickHouse HTTPS & JDBC

Password

Password for the ClickHouse connection available in the Aiven console: Service Overview > Connection information > ClickHouse HTTPS & JDBC

Connect to the service#

Replace the placeholders in the code with meaningful information on your service connection and run the code.

package main
import "database/sql"
import "fmt"
import "log"
import _ "github.com/ClickHouse/clickhouse-go/v2"
func main() {
        host := "HOST"
        https_port := HTTPS_PORT
        username := "USERNAME"
        password := "PASSWORD"
        conn, err := sql.Open(
                "clickhouse",
                fmt.Sprintf(
                        "https://%s:%d?username=%s&password=%s&secure", host, https_port, username, password))
        if err != nil {
                log.Fatal(err)
        }
        rows, err := conn.Query("SELECT version()")
        if err != nil {
                log.Fatal(err)
        }
        defer rows.Close()
        for rows.Next() {
                var version string
                if err := rows.Scan(&version); err != nil {
                        log.Fatal(err)
                }
                fmt.Println(version)
        }
}

Expected result

Now you have your service connection established and (possibly) configured. You can proceed to uploading data into your database.

See also