Hbase 基于行的筛选器无法处理从Phoenix创建的表
然后,当使用以下命令执行范围查询时,Hbase 基于行的筛选器无法处理从Phoenix创建的表,hbase,phoenix,Hbase,Phoenix,然后,当使用以下命令执行范围查询时,HBase: 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'); up
HBase
:
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
表与Phoenix
表之间进行1:1
映射
hbase(main):004:0> scan 'EMPPH2', {STARTROW => '1', ENDROW => '3'}
ROW COLUMN+CELL
0 row(s) in 0.0030 seconds
ROW
过滤器在使用HBASE
创建表时工作正常,但在使用Phoenix
创建表时不工作,正如您在对表进行完全扫描(scan'EMPPH2'
时所看到的那样,rowkey不是简单的字符串(如'1'或'3'),而是表示在Phoenix中定义的键的字节数组(类型为4字节的integer
)。例如,integer1
的内部表示形式为0x8000001
(1000000000000000000000001
,二进制)
因此,如果要在第1行和第3行之间查询数据,必须执行以下操作:
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
scan 'EMPPH2', {STARTROW => "\x80\x00\x00\x01", ENDROW => "\x80\x00\x00\x03"}