基于行的筛选器不能与从Phoenix创建的表一起使用

时间:2018-07-27 00:47:19

标签: hbase phoenix

create table empPh2(id integer primary key, fname varchar, lname varchar)COLUMN_ENCODED_BYTES=0 
upsert into empPh2 values (1, 'A', 'B'); 
upsert into empPh2 values (2, 'B', 'B'); 
upsert into empPh2 values (3, 'C', 'B'); 
upsert into empPh2 values (4, 'John', 'B');

然后何时使用以下命令HBase进行范围查询:

hbase(main):004:0> scan 'EMPPH2', {STARTROW => '1', ENDROW => '3'} 
ROW                                                COLUMN+CELL                                                                                                                                         
0 row(s) in 0.0030 seconds 

我看到HBASE中的行有多余的符号。不确定如何在1:1表到HBASE表之间建立Phoenix映射。

ROW                                              COLUMN+CELL                                                                                                                                 
 \x80\x00\x00\x01                                column=0:FNAME, timestamp=1532651140732, value=A                                                                                         
 \x80\x00\x00\x01                                column=0:LNAME, timestamp=1532651140732, value=B                                                                                             
 \x80\x00\x00\x01                                column=0:_0, timestamp=1532651140732, value=x                                                                                               
 \x80\x00\x00\x02                                column=0:FNAME, timestamp=1532651151877, value=B                                                                                         
 \x80\x00\x00\x02                                column=0:LNAME, timestamp=1532651151877, value=B                                                                                             
 \x80\x00\x00\x02                                column=0:_0, timestamp=1532651151877, value=x                                                                                               
 \x80\x00\x00\x03                                column=0:FNAME, timestamp=1532651164899, value=C                                                                                         
 \x80\x00\x00\x03                                column=0:LNAME, timestamp=1532651164899, value=B  

ROW过滤器在使用HBASE创建的表时工作正常,但在使用Phoenix创建的表时无效。

1 个答案:

答案 0 :(得分:0)

正如您在对表(scan 'EMPPH2'进行全面扫描时所看到的那样,行键不是简单的字符串(如'1'或'3'),而是代表在Phoenix中定义的键的字节数组(类型为integer,大小为4个字节)。整数1的内部表示形式是0x80000001(二进制形式的10000000 00000000 00000000 00000001)。

因此,如果要查询第1行和第3行之间的数据,则必须执行以下操作:

scan 'EMPPH2', {STARTROW => "\x80\x00\x00\x01", ENDROW => "\x80\x00\x00\x03"}