Phoenix 映射已存在 HBase 表,查询不到数据

问题描述:
phoenix 映射已存在的 hbase 表 demo 时,表映射正常,但是使用 phoenix 查询时,一直查询不到数据。
1、hbase shell 插入数据

create 'test1','i'
put 'test1','1','i:name','zhangsan'
put 'test1','2','i:name','lisi'
put 'test1','1','i:age','15'
put 'test1','2','i:age','2'
hbase(main):006:0> scan 'test1'
ROW                                          COLUMN+CELL
 1                                           column=i:age, timestamp=1523416240312, value=15
 1                                           column=i:name, timestamp=1523416227940, value=zhangsan
 2                                           column=i:age, timestamp=1523416249281, value=2
 2                                           column=i:name, timestamp=1523416234516, value=lisi

2、phoenix 创建表

create table "test1"(
    pk VARCHAR PRIMARY KEY
    ,"i"."name" VARCHAR
    ,"i"."age" VARCHAR);

3、phoenix 查询,查询不到数据

0: jdbc:phoenix:> select * from "test1";
+-----+-------+------+
| PK  | name  | age  |
+-----+-------+------+
+-----+-------+------+
No rows selected (0.238 seconds)

问题原因:
经过阅读官方文档发现,phoenix 4.10 版本后,对列映射做了优化,采用一套新的机制,不在基于列名方式映射到 hbase。

解决办法:
1、如果只做查询,强烈建议使用 phoenix 视图方式映射,删除视图不影响 hbase 源数据,语法如下:

create view "test1"(
    pk VARCHAR PRIMARY KEY
    ,"i"."name" VARCHAR
    ,"i"."age" VARCHAR);

2、必须要表映射,需要禁用列映射规则(会降低查询性能),如下:

create table "test1"(
    pk VARCHAR PRIMARY KEY
    ,"i"."name" VARCHAR
    ,"i"."age" VARCHAR)
 column_encoded_bytes=0;

参考:
http://phoenix.apache.org/columnencoding.html

你可能感兴趣的:(Hbase)