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
创建的表时无效。
答案 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"}