美文网首页HBASE生产维护之处理记录
Apache Phoenix 映射已存在 HBase 表,查询不

Apache Phoenix 映射已存在 HBase 表,查询不

作者: Saxon_323e | 来源:发表于2018-12-25 10:47 被阅读0次

    问题描述

    按照网友提供的 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)

    4. 问题原因 

    经过阅读官方文档发现,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

    亲测可用解决方案: 

    在创建表时禁用Phoenix4.10的新特性(禁用对字段值进行压缩编码),如:

    create table "safeclound"."tb_elec_power"("ROW" varchar primary key, "info"."activeA" varchar)COLUMN_ENCODED_BYTES=0;

    这样就能查出数据了,另外,根据官方文档的内容,“One can set the column mapping property only at the time of creating the table. ”,也就是说只有在创建表的时候才能够设置属性。如果在创建的时候没有设置,之后怎么去设置就不太清楚了,可能是无法改变,至少目前我还没有找到相关方法。所以大家在创建映射表的时候一定要注意设置属性。

    相关文章

      网友评论

        本文标题:Apache Phoenix 映射已存在 HBase 表,查询不

        本文链接:https://www.haomeiwen.com/subject/gdwxlqtx.html