在hbase上使用phoenix查询服务器以一个请求插入多行

cidc1ykv  于 2021-06-09  发布在  Hbase
关注(0)|答案(2)|浏览(459)

我希望将多个upsert请求合并为一个请求,并将其传递给phoenix查询服务器。
我将发送以下json来向上插入一条记录

POST https://tishihdiphoenix.azurehdinsight.net/hbasephoenix/ 
HTTP/1.1
request: {
   "request":"prepareAndExecute",
   "connectionId":"000000-0000-0000-00000001",
   "sql":"UPSERT INTO Table ( col1 ) VALUES ( value1 ):100"
}
Authorization: Basic YWRtaW46Tm9tb3JlTm9tb3JlIT0x
Host: tishihdiphoenix.azurehdinsight.net
Content-Length: 0
Connection: Keep-Alive

我希望能够在一个json中发送多个具有不同值的upsert语句。我查看了avatica路线图,它提到我们可以通过执行fetch调用复合rpc。
http://calcite.apache.org/docs/avatica_roadmap.html
我希望得到一个如何做到这一点的例子,因为在文档中没有执行获取的例子。

fykwrbwg

fykwrbwg1#

关于使用查询服务器,这可能有点偏离主题。
我的经验 HBase Phoenix Batch Insert 正在使用jdbc驱动程序,
关闭自动提交连接
执行一系列insert语句
手动提交

hiz5n14c

hiz5n14c2#

https://calcite.apache.org/docs/avatica_json_reference.html
https://calcite.apache.org/docs/avatica_protobuf_reference.html
我建议使用协议缓冲区(phoenix 4.7.+使用calcite 1.5,默认情况下使用协议缓冲区),而不是json,因为生成的类比json库更易于使用。协议缓冲区也与语言无关。
对于json或协议缓冲区,基本过程如下:
发送 PrepareRequest 接收 PrepareResponse 发送 ExecuteRequestTypedValue 对于每个参数
接收 ExecuteResponse 如果有更多Dataframe,请发送 FetchRequest 接受 FetchResponse 对于所有后续帧。

相关问题