gpt4 book ai didi

go - 如何使用golang连接到配置单元

转载 作者:数据小太阳 更新时间:2023-10-29 03:29:04 26 4
gpt4 key购买 nike

我使用 https://github.com/apache/hive/blob/trunk/service/if/TCLIService.thrift到 gen golang sdk,但它不起作用。 golang sdk只能opensession。我在 python sdk 中比较了我的代码,没有发现任何错误用法。下面是我的 golang 代码。

socket, err := thrift.NewTSocket("localhost:11000")
if err != nil {
fmt.Printf("%s\n", err)
return
}
trans := thrift.NewTBufferedTransport(socket, 1024)

protocol := thrift.NewTBinaryProtocol(trans, true, true)
client := hive.NewTCLIServiceClientProtocol(trans, protocol, protocol)
trans.Open()
defer trans.Close()

sReq := hive.NewTOpenSessionReq()
sReq.ClientProtocol = 0

session, err := client.OpenSession(sReq)
fmt.Printf("!%#v %s\n", session, err)

exeReq := hive.NewTExecuteStatementReq()
exeReq.SessionHandle = session.SessionHandle
exeReq.Statement = "USE default"

result, err := client.ExecuteStatement(exeReq)
fmt.Printf("result: %s !! %s\n", result, err)

输出是:

!&hive.TOpenSessionResp{Status:(*hive.TStatus)(0xc21001e460), ServerProtocolVersion:0, SessionHandle:(*hive.TSessionHandle)(0xc2100002b0), Configuration:map[string]string{}} %!s(<nil>)

result: <nil> !! Required field 'guid' is unset! Struct:THandleIdentifier(guid:null, secret:null)

必填字段“guid”未设置! Struct:THandleIdentifier(guid:null, secret:null) 由服务器返回。我已经尝试了其他配置单元功能,总是同样的错误。

是我的代码有问题还是thirft还不支持golang?

最佳答案

我找到原因了。在thrift生成的文件ttypes.go中,THandleIdentifier结构使用二进制协议(protocol)写入guid和secret,我发现官方Python SDK写入guid和secret使用WriteString 二进制协议(protocol)的功能,所以我修改了代码手册。

func (p *THandleIdentifier) writeField1(oprot thrift.TProtocol) (err error) {
if p.Guid != nil {

// the origin code is:
//if err := oprot.WriteFieldBegin("guid", thrift.BINARY, 1); err != nil {

if err := oprot.WriteFieldBegin("guid", thrift.STRING, 1); err != nil {
return fmt.Errorf("%T write field begin error 1:guid: %s", p, err)
}

//the origin code is:
//if err := oprot.WriteString(p.Guid; err != nil {
if err := oprot.WriteString(string(p.Guid); err != nil {
return fmt.Errorf("%T.guid (1) field write error: %s", p)
}
if err := oprot.WriteFieldEnd(); err != nil {
return fmt.Errorf("%T write field end error 1:guid: %s", p, err)
}
}
return err
}

和 secret 属性(property)一样需要修改。

关于go - 如何使用golang连接到配置单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25990866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com