文档章节

Golang通过thrift连接Hive简单demo

DJZhu
 DJZhu
发布于 2017/09/06 17:15
字数 202
阅读 1.7K
收藏 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
粉丝 3
博文 26
码字总数 30529
作品 0
广州
程序员
私信 提问
加载中

评论(0)

Grpc介绍 — ProToBuf基本使用

RPC(Remote Procedure Call)远程过程调用,关注笔者的同学应该知道之前笔者出过关于Thrift对应的问题,这次主要来说的是Google开源的Grpc,和Thrift有很大的区别Grpc是基于HTTP2.0并且依赖...

喵了_个咪
2019/02/28
348
0
通过hiveserver远程服务构建hive web查询分析工具

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

大数据之路
2012/12/02
6K
0
Spark Thrift JDBCServer应用场景解析与实战案例

[TOC] Spark Thrift JDBCServer应用场景解析与实战案例 1 前言 这里说的Spark Thrift JDBCServer并不是网上大部分写到的Spark数据结果落地到RDB数据库中所使用的JDBC方式,而是指Spark启动一...

xpleaf
2019/07/13
0
0
hive学习(一)hive架构及hive3.1.1三种方式部署安装

1.hive简介 logo 是一个身体像蜜蜂,头是大象的家伙,相当可爱。 Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据。它架构在Hadoop之上,总归为大数据,并使得查询和分析方便。并提...

osc_o1saj84p
2019/01/07
2
0
hive系列之懵懂

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

空_明
2013/12/04
262
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周五乱弹 —— 头发和不要头发,你总要选一个

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《雾 缀じた街 ふたつのかげ》- Porkkana 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
35
0
一道 算法题 引发的 ‘xx现场’

请 熟悉的语言 去 验证 在输入框中输入的是否是一个正确的网址 初次读题萌新有点 不知所措的样子一查 MDN 吓一跳 ----- 一个不怎么熟悉的方法跳出眼边URL() 构造函数返回一个新创建的 ...

酒窝yun过去了
今天
19
0
如何检查jQuery中是否已选中复选框? - How to check whether a checkbox is checked in jQuery?

问题: I need to check the checked property of a checkbox and perform an action based on the checked property using jQuery. 我需要检查复选框的checked属性,并使用jQuery根据check......

技术盛宴
今天
12
0
mongoose 使用

http://www.mongoosejs.net/ 编写MongoDB验证,转换和业务逻辑是非常麻烦的. 所以Mongoose应运而生了. const mongoose = require('mongoose');mongoose.connect('mongodb://localhost/te......

东东笔记
今天
30
0
微服务

什么是微服务? 使用一套小服务来开发单个应用的方式,每个服务运行在独立的进程里,一般采用轻量级的通讯机制互联,并且他们可以通过自动化的方式部署。 微服务的特征 单一职责 轻量级通信 ...

鸿FW
今天
23
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部