如何将clickhouse的grouparray函数的结果初始化为数组

evrscar2  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(1)|浏览(536)

在我的go应用程序中,我通过clickhouse go包向clickhouse数据库发出请求。我所做的这个查询总是只返回一条记录,它是一个整数数组。有没有办法将结果初始化到go中的数组?

var ids []int

ids, err := database.ClickHouse.Exec("SELECT groupArray(ID) FROM layers;")
if err != nil {
    fmt.Println(err)
}

我尝试了这样的代码,但出现了一个错误: cannot assign Result to ids (type []int) in multiple assignment.

xkftehaa

xkftehaa1#

exec方法不返回行,而是返回 driver.Result 以及 error .

func (stmt *stmt) Exec(args []driver.Value) (driver.Result, error)
                                             ^^^^^^^^^^^^^

而且,driver.result类型具有以下定义(已删除注解):

type Result interface {
    LastInsertId() (int64, error)
    RowsAffected() (int64, error)
}

您要查找的是返回 driver.Rows :

func (stmt *stmt) Query(args []driver.Value) (driver.Rows, error)
                                              ^^^^^^^^^^^

然后可以遍历这些行以生成所需的数组。
readme.md中列出了一个示例(复制到此处):

rows, err := connect.Query("SELECT country_code, os_id, browser_id, categories, action_day, action_time FROM example")
if err != nil {
    log.Fatal(err)
}
defer rows.Close()

for rows.Next() {
    var (
        country               string
        os, browser           uint8
        categories            []int16
        actionDay, actionTime time.Time
    )
    if err := rows.Scan(&country, &os, &browser, &categories, &actionDay, &actionTime); err != nil {
        log.Fatal(err)
    }
    log.Printf("country: %s, os: %d, browser: %d, categories: %v, action_day: %s, action_time: %s", country, os, browser, categories, actionDay, actionTime)
}

希望有帮助!

相关问题