使用Hbase上的phoenix查询服务器在一个请求中插入多行

时间:2016-01-25 10:37:08

标签: json hbase phoenix apache-calcite

我希望将多个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路线图,并提到我们可以通过Execute-Fetch调用复合RPC。

http://calcite.apache.org/docs/avatica_roadmap.html

我希望得到一个关于如何执行此操作的示例,因为文档中没有执行-fetch示例。

2 个答案:

答案 0 :(得分:0)

https://calcite.apache.org/docs/avatica_json_reference.html

https://calcite.apache.org/docs/avatica_protobuf_reference.html

我推荐使用Protocol Buffers(Phoenix 4.7。+使用Calcite 1.5,默认使用Protocol Buffers)而不是JSON,因为生成的类比JSON库更清晰。协议缓冲区也是语言无关的。

对于JSON或Protocol Buffers,基本过程如下:

发送PrepareRequest

接收PrepareResponse

为每个参数发送ExecuteRequest TypedValue

接收ExecuteResponse

如果您有更多数据框,请为所有后续帧发送FetchRequest并接收FetchResponse

答案 1 :(得分:0)

这可能与您使用查询服务器的主题有点不同。

我使用HBase Phoenix Batch Insert的经验是使用JDBC驱动程序,

  • 关闭连接上的自动提交

  • 执行一系列插入语句

  • 手动提交