项目作者: uxff

项目描述 :
implements hiveserver2(thrift rpc) client in golang
高级语言: Thrift
项目地址: git://github.com/uxff/gohive.git
创建时间: 2017-11-04T10:50:40Z
项目社区:https://github.com/uxff/gohive

开源协议:

下载


gohive

golang链接Hive可以使用odbc和thrift两种方式。

  • thrift方式,是golang作为thrift客户端使用thrift协议与hiveserver2通信。
  • odbc方式,是通过libodbc.so,libodbchive.so(第三方可替代)来链接hive。go odbc 方式连接hive查看这里

本库是使用golang链接hiveserver2的库。

对应hive版本是2.1。

go通过hive的thrift rpc接口链接hiveserver2。

实现了同步查询,异步查询等接口,并简化调用,优化性能,客户端不用处理复杂的thrift接口传输对象。

go get “github.com/uxff/gohive”

当前使用thrift-0.9.3版本,与hive的thrift对应。

如果需要更新到thrift-0.10以上版本,则删除tcliservice,将tcliservice.ctx重命名为tcliservice,进行go build会报错,将对应的thrift接口第一个参数增加context.Background()或自定义context, 即可。

sql语法中查询字段设置别名必须用反引号 ` 。

例如:

  1. select tcid, uid `用户id`, bid+1, sid/100, tcphone, tccharge, tccreated from mall_trade_charges_update_default limit 15

example:

  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "github.com/uxff/gohive"
  6. )
  7. func main() {
  8. // usage : ./main -h 127.0.0.1:50000 -d default -q "show tables"
  9. hiveAddr := flag.String("h", "101.201.57.41:50000", "addr of hive")
  10. db := flag.String("d", "default", "db of hive")
  11. query := flag.String("q", "show tables", "hsql of query")
  12. flag.Parse()
  13. conn, err := gohive.Connect(*hiveAddr, gohive.DefaultOptions)
  14. if err != nil {
  15. fmt.Println("connect hive error:", err)
  16. return
  17. }
  18. conn.Exec("use " + *db)
  19. rets, err := conn.SimpleQuery(*query)
  20. if err != nil {
  21. fmt.Println("query errer:", err)
  22. }
  23. fmt.Println("hive query result=", rets)
  24. }

以上用例已测试通过。后续将补充thrift-0.10版本。