新领域的轮子和一些想法

Go Official Blog

共 4803字,需浏览 10分钟

 · 2022-10-24

Go driver SDK for databend cloud released!

由于在 databend cloud[1] 各个项目的代码中已经充斥着大量重复的请求 databend-query 的代码,所以亟需一个 driver SDK 来实现大一统,于是在几周前就开始着手实现 databend cloud 的 go driver,当时用比较短的时间大概实现了一个架子,详情可以见 这篇文章[2]。碍于中间有几个优先级比较高的工作就暂时搁置了这个项目。本周 all in 这个项目,终于 release 了 v0.0.1 版本[3],虽然代码的结构、功能的丰富程度、代码的优雅程度都跟标杆 SDK - clickhouse-go[4] 的水平有较大差距,但基本的方法比如 sql.Open, Exec, Query, Next, Rows 等都已经可用。先来看几个🌰吧!

Execution

    dsn, cfg, err := getDSN()
    if err != nil {
    log.Fatalf("failed to create DSN from Config: %v, err: %v", cfg, err)
        }
  conn, err := sql.Open("databend", dsn)
    if err != nil {
        return err
     }
    conn.Exec(`DROP TABLE IF EXISTS data`)
    _, err = conn.Exec(`
    CREATE TABLE IF NOT EXISTS  data(
        Col1 UInt8,
        Col2 String
    ) 
    `
)
    if err != nil {
        return err
    }
    _, err = conn.Exec("INSERT INTO data VALUES (1, 'test-1')")

Query Row

可以用 Scan 方法来解析出单条数据

row := conn.QueryRow("SELECT * FROM data")
var (
    col1             uint8
    col2, col3, col4 string
    col5            []string
    col6             time.Time
)
if err := row.Scan(&col1, &col2, &col3, &col4, &col5, &col6); err != nil {
    return err
}

Query Rows

当然可以用 Next 来不断迭代获取所有数据

row := conn.QueryRow("SELECT * FROM data")
var (
    col1             uint8
    col2, col3, col4 string
    col5            []string
    col6             time.Time
)
for rows.Next() {
    if err := row.Scan(&col1, &col2, &col3, &col4, &col5, &col6); err != nil {
    return err
    }
    fmt.Printf("row: col1=%d, col2=%s, col3=%s, col4=%s, col5=%v, col6=%v\n", col1, col2, col3, col4, col5, col6)
}

这样在请求 databend-query 的时候,就不用再每次都写一遍 http 请求/解析的代码啦。由于之前从未写过这类项目,也算是一个小小的挑战,so 代码目前处于毛坯房的状态需要进一步打磨 Emma。

bendsql 尝鲜 go driver

Go driver release 后马上就迎来了第一个用户(小白鼠) - bendsql[5]。bendsql 中有个命令用来执行 SQL 语句, bendsql query "select * from table",所以我先将这里面请求 databend-query 的代码都换成了 go driver - https://github.com/databendcloud/bendsql/pull/22,可以看到删掉了不少代码,清晰了不少。接下来要在其他项目中接受检验了😂。

来看看效果:

kruise-tools

本周 kubectl-kruise 插件迎来了一次更新[6],包含了两个 bug-fix 和新的 feature:

🐛 Bug fix:

  • Fix rollout status of partitioned update https://github.com/openkruise/kruise-tools/pull/68
  • Fix ads patch for rollout undo https://github.com/openkruise/kruise-tools/pull/71

🚀 Feat:

  • Support kubectl-kruise create ContainerRecreateRequest https://github.com/openkruise/kruise-tools/pull/66
  • Add resourcedistribution generator https://github.com/openkruise/kruise-tools/pull/69. Thanks @dong4325

其中 resourcedistribution generator 是开源之夏的一个项目,主要是用来方便用户生成 resourceDistrubution 资源的,关于 resouceDistribution[7] 和这个 generator 后面等功能稳定后再多做介绍。

好了,以上,感兴趣的可以阅读原文了解更多。

参考资料

[1]

databend cloud: https://app.databend.com/

[2]

36-weekly-report: https://cloudsjhan.github.io/2022/09/02/2022-36-Open-source-weekly-report/

[3]

github databend-go: https://github.com/databendcloud/databend-go

[4]

github clickhouse-go: https://github.com/ClickHouse/clickhouse-go

[5]

github bendsql: https://github.com/databendcloud/bendsql

[6]

kruise-tool release: https://github.com/openkruise/kruise-tools/releases/tag/v1.0.5

[7]

resourceDistribution docs: https://openkruise.io/docs/user-manuals/resourcedistribution

浏览 39
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报