本文介绍如何在 Go 开发环境连接并访问 ByteHouse 云数仓。
ByteHouse 兼容开源 MySQL Go Driver 程序:go-sql-driver/mysql( 本文已在程序 1.8.1 版本下验证)
本章节介绍通过 go-sql-driver 程序连接 ByteHouse 的基本用法,您可以在 程序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}
、{API_KEY}
等字段。
// 数据库连接信息 host := "{HOST}" // host地址 port := 3306 user := "bytehouse" password := "{API_KEY}" // 前置工作中获取得的 api key database := "{DATABASE_NAME}" // 连接数据库名称
import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) func TestMySQLConnection(t *testing.T) { // 数据库连接信息 host := "{HOST}" // host地址 port := 3306 user := "bytehouse" password := "{API_KEY}" // 前置工作中获取得的 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") }