本文介绍如何在 Go 开发环境连接并访问 ByteHouse 云数仓。
ByteHouse 兼容开源 MySQL Go Driver 程序:go-sql-driver/mysql( 本文已在程序 1.8.1 版本下验证)
您可以在 程序Github 主页 获取最新的文档和发布版本信息。
go get -u github.com/go-sql-driver/mysql --以下为依赖程序 go get -u github.com/stretchr/testify
安装完成后,在 go 程序代码的 import 中插入以下内容。
import ( "database/sql" _ "github.com/go-sql-driver/mysql" )
可参考下面代码样例填写 ByteHouse 连接信息,注意根据前提条件中获取的信息填写其中的 host、password、database 等字段的值。
// 数据库连接信息 host := "{HOST}" // host地址 port := 3306 user := "bytehouse" password := "{API_KEY}" // 前置工作中获取得的 api key database := "{DATABASE_NAME}" // 连接数据库名称
参数 | 配置要点 |
---|---|
host | 配置为 ByteHouse 的网络域名,您可以在 ByteHouse 控制台的 租户管理>基本信息>网络信息 中查看对应信息。详情请参见步骤二:配置网络信息。 |
port | 配置为固定值 3306。 |
user & password |
|
database | 配置为连接 ByteHouse 的数据库名称。 |
可参考下面代码样例填写 ByteHouse 连接信息,注意根据前提条件中获取的信息填写其中的 host、user、password 等字段的值。
// 数据库连接信息 host := "{HOST}" port := 3306 user := "{accountID_or_accountName}::{username}[::{envID}]" password := "{PASSWORD}" database := "{DATABASE_NAME}" // 连接数据库名称
参数 | 配置要点 |
---|---|
host | 配置为 ByteHouse 的网络域名,您可以在 ByteHouse 控制台的 租户管理>基本信息>网络信息 中查看对应信息。详情请参见步骤二:配置网络信息。 |
port | 配置为固定值 3306。 |
user & password |
|
database | 配置为连接 ByteHouse 的数据库名称。 |
import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) func TestMySQLConnection(t *testing.T) { // 数据库连接信息 host := "{HOST}" // host地址 port := 3306 user := "bytehouse" password := "{API_KEY}" database := "{DATABASE_NAME}" // 创建数据库连接 dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?allowCleartextPasswords=1", user, password, host, port, database) db, err := sql.Open("mysql", dsn) if err != nil { log.Fatal(err) } defer db.Close() // 验证连接是否正常 err = db.Ping() assert.Nil(t, err, "Failed to connect to database") // 简单查询 query := "show tables;" rows, err := db.Query(query) assert.Nil(t, err, "Query execution failed") defer rows.Close() // 获取列名,并打印 columns, err := rows.Columns() fmt.Println(strings.Join(columns, ",")) // 获取查询结果,并打印 for rows.Next() { values := make([]sql.RawBytes, len(columns)) dest := make([]interface{}, len(columns)) for i := range columns { dest[i] = &values[i] } // 将结果保存到values中 if err := rows.Scan(dest...); err != nil { log.Fatal(err) } // 将values转成string数组 record := make([]string, len(columns)) for i, value := range values { if value != nil { record[i] = string(value) } else { record[i] = "NULL" } } // 打印行的结果 fmt.Println(strings.Join(record, ",")) } assert.Nil(t, rows.Err(), "Rows iteration error") }