如何通过restapi删除带有二进制rowkey的hbase单元?

wgeznvg7  于 2021-06-09  发布在  Hbase
关注(0)|答案(3)|浏览(445)

通过restapi删除hbase单元的路径是 /<table>/<row>/<column>:<qualifier> . 如果rowkey是一个字符串,比如“hello”,它就工作了。但是,当rowkey是二进制数据(例如,180的整数)时,我应该如何对rowkey进行编码?我尝试对rowkey进行base64编码,得到的状态码是200,但该单元格根本没有被删除。
例子:
我试图通过向路径发送删除请求来删除单元格 http://ecs5.njzd.com:20550/X/ZAAAAA==/C:c1 ,在哪里 ecs5.njzd.com:20550 是hbase rest服务器的主机名和端口, X 表的名称, ZAAAAA== 是rowkey的based64解码值 100 (内景),以及 C:c1 是列名。我得到了一个状态码为200的响应,但单元格仍然存在于表中。

ecr0jaav

ecr0jaav1#

我只是在命令下尝试,它对我有效。您不需要在delete查询中发送base64编码的数据。
curl-v-x删除“内容类型:text/xml”http://hostname:端口/testtable/10101/colfam1:col1
如果不起作用,则粘贴表的hbase scan输出,这将提供有关准备删除查询的想法。

ulmd4ohb

ulmd4ohb2#

删除不是像put或get那样直接进行的。它取决于主要压缩,基于版本,基于时间戳,自动刷新等,所以当你说你看到它回来,请验证这些设置以及。正如@shashi所说,模式本身是在restapi中为delete定义的,用编码来处理它,所以您不需要发送编码的数据

z4iuyo4d

z4iuyo4d3#

正确的方法是写 rowkey 以十六进制转义形式表示相应的字节数组。例如,当rowkey是100的整数时,我应该将rowkey写成 d\x00\x00\x00 ,它是整数的十六进制转义表示 100 .
实际上,在hbase shell中扫描表时,如果 rowkey 或者 value 不是字符串。

相关问题