C# 从不同版本的配置单元获得的TFetchResultsResp结果之间存在冲突
我已经使用thrift为TCLIService生成了C#source,以连接到Hiveserver2,当我将Hiveserver2连接到配置单元版本0.13时,TFetchResultsResp结果始终以列值而不是行值返回,即行计数始终为零 当我尝试使用配置单元版本0.12时,TFetchResultsResp结果始终以行而不是列的形式返回,即列计数始终为零 请告知我是否需要设置任何属性来获取所有配置单元版本中结果中的列和行C# 从不同版本的配置单元获得的TFetchResultsResp结果之间存在冲突,c#,hadoop,hive,thrift,C#,Hadoop,Hive,Thrift,我已经使用thrift为TCLIService生成了C#source,以连接到Hiveserver2,当我将Hiveserver2连接到配置单元版本0.13时,TFetchResultsResp结果始终以列值而不是行值返回,即行计数始终为零 当我尝试使用配置单元版本0.12时,TFetchResultsResp结果始终以行而不是列的形式返回,即列计数始终为零 请告知我是否需要设置任何属性来获取所有配置单元版本中结果中的列和行 TSocket transport = new TSo
TSocket transport = new TSocket("localhost", 10000);
TBinaryProtocol protocol = new TBinaryProtocol(transport);
TCLIService.Client client = new TCLIService.Client(protocol);
transport.Open();
TOpenSessionReq openReq = new TOpenSessionReq();
TOpenSessionResp openResp = client.OpenSession(openReq);
TSessionHandle sessHandle = openResp.SessionHandle;
TExecuteStatementReq execReq = new TExecuteStatementReq();
execReq.SessionHandle = sessHandle;
execReq.Statement = "show tables";
TExecuteStatementResp execResp = client.ExecuteStatement(execReq);
TOperationHandle stmtHandle = execResp.OperationHandle;
TFetchResultsReq fetchReq = new TFetchResultsReq();
fetchReq.OperationHandle = stmtHandle;
fetchReq.Orientation = TFetchOrientation.FETCH_FIRST;
fetchReq.MaxRows = 99999999;
TFetchResultsResp resultsResp = client.FetchResults(fetchReq);
TRowSet resultsSet = resultsResp.Results;
//In hive version 0.13, rows count zero
List<TRow> resultRows = resultsSet.Rows;
//In Hive version 0.12, columns count zero
List<TColumn> resultColumn = resultsSet.Columns;
TCloseOperationReq closeReq = new TCloseOperationReq();
closeReq.OperationHandle = stmtHandle;
client.CloseOperation(closeReq);
TCloseSessionReq closeConnectionReq = new TCloseSessionReq();
closeConnectionReq.SessionHandle = sessHandle;
client.CloseSession(closeConnectionReq);
transport.Close();
TSocket传输=新的TSocket(“本地主机”,10000);
TBinaryProtocol协议=新的TBinaryProtocol(传输);
TCLIService.Client Client=新的TCLIService.Client(协议);
transport.Open();
TOpenSessionReq openReq=新的TOpenSessionReq();
TOpenSessionResp openResp=client.OpenSession(openReq);
TSessionHandle sessHandle=openResp.SessionHandle;
texecuteTestEntreq execReq=新的texecuteTestEntreq();
execReq.SessionHandle=sessHandle;
execReq.Statement=“显示表格”;
TExecuteStatementResp execResp=client.ExecuteStatement(execReq);
TOperationHandle stmtHandle=execResp.OperationHandle;
TFetchResultsReq fetchReq=新的TFetchResultsReq();
fetchReq.OperationHandle=stmtHandle;
fetchReq.Orientation=TFetchOrientation.FETCH_优先;
fetchReq.MaxRows=9999999;
TfetchResultResp ResultResp=client.FetchResults(fetchReq);
TRowSet ResultSet=结果响应结果;
//在配置单元版本0.13中,行数为零
List resultRows=resultset.Rows;
//在配置单元版本0.12中,列数为零
List resultColumn=ResultSet.Columns;
TCloseOperationReq closeReq=新TCloseOperationReq();
closeReq.OperationHandle=stmtHandle;
client.CloseOperation(closeReq);
TCloseSessionReq closeConnectionReq=新TCloseSessionReq();
closeConnectionReq.SessionHandle=sessHandle;
client.CloseSession(closeConnectionReq);
transport.Close();
原因是以前的序列化设计(row major)效率非常低,导致了大量不必要的网络流量。当前的设计(主要专栏)解决了其中一些问题