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

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

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

  1. var ids []int
  2. ids, err := database.ClickHouse.Exec("SELECT groupArray(ID) FROM layers;")
  3. if err != nil {
  4. fmt.Println(err)
  5. }

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

xkftehaa

xkftehaa1#

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

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

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

  1. type Result interface {
  2. LastInsertId() (int64, error)
  3. RowsAffected() (int64, error)
  4. }

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

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

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

  1. rows, err := connect.Query("SELECT country_code, os_id, browser_id, categories, action_day, action_time FROM example")
  2. if err != nil {
  3. log.Fatal(err)
  4. }
  5. defer rows.Close()
  6. for rows.Next() {
  7. var (
  8. country string
  9. os, browser uint8
  10. categories []int16
  11. actionDay, actionTime time.Time
  12. )
  13. if err := rows.Scan(&country, &os, &browser, &categories, &actionDay, &actionTime); err != nil {
  14. log.Fatal(err)
  15. }
  16. log.Printf("country: %s, os: %d, browser: %d, categories: %v, action_day: %s, action_time: %s", country, os, browser, categories, actionDay, actionTime)
  17. }

希望有帮助!

展开查看全部

相关问题