通过REST api删除HBase单元的路径为/<table>/<row>/<column>:<qualifier>
。如果rowkey是一个字符串,例如&#34; Hello&#34;,它可以工作。但是当rowkey是二进制数据(例如,180的整数)时,我应该如何编码rowkey?我尝试对rowkey进行base64编码并获得200的状态代码,但该单元格根本没有被删除。
示例:
我尝试通过向路径http://ecs5.njzd.com:20550/X/ZAAAAA==/C:c1
发送DELETE请求来删除单元格,其中ecs5.njzd.com:20550
是HBase REST服务器的主机名和端口,X
是表的名称,ZAAAAA==
是rowkey 100
(int)的based64解码值,C:c1
是列名。我得到了状态代码为200的响应,但表格中仍然存在单元格。
答案 0 :(得分:1)
我只是尝试下面的命令,它对我有用。你不要在删除查询中发送base64编码数据。
curl -v -X DELETE“Content-Type:text / xml”http://hostname:port/testtable/10101/colfam1:col1
如果它不起作用,则粘贴表格的hbase扫描输出,这将提供有关准备删除查询的想法。
答案 1 :(得分:0)
删除不像put或get那样直截了当。它取决于主要的压缩,基于版本,基于时间戳,自动刷新等。所以当你说你看到它时,请验证这些设置。正如@Shashi所说,架构本身是为Rest API中的删除定义的,用编码处理它,所以你不需要发送编码数据
答案 2 :(得分:0)
正确的方法是以相应字节数组的十六进制转义表示形式写rowkey
。例如,当rowkey是100的整数时,我应该将rowkey写为d\x00\x00\x00
,这是整数100
的十六进制转义表示。
实际上,当您扫描HBase shell中的表时,如果rowkey
或value
不是字符串,您将看到相同的结果。