linyongzuo / gohive-1

implements hiveserver2(thrift rpc) client in golang

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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语法中查询字段设置别名必须用反引号 ` 。

例如:

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

example:

package main

import (
    "flag"
    "fmt"
    "github.com/uxff/gohive"
)


func main() {

    // usage : ./main -h 127.0.0.1:50000 -d default -q "show tables"

    hiveAddr := flag.String("h", "101.201.57.41:50000", "addr of hive")
    db := flag.String("d", "default", "db of hive")
    query := flag.String("q", "show tables", "hsql of query")
    flag.Parse()

    conn, err := gohive.Connect(*hiveAddr, gohive.DefaultOptions)
    if err != nil {
        fmt.Println("connect hive error:", err)
        return
    }

    conn.Exec("use " + *db)

    rets, err := conn.SimpleQuery(*query)

    if err != nil {
        fmt.Println("query errer:", err)
    }

    fmt.Println("hive query result=", rets)
    
}

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

About

implements hiveserver2(thrift rpc) client in golang


Languages

Language:Thrift 67.7%Language:Go 32.3%