美文网首页我爱编程程序员Phoenix
Apache Phoenix 映射已存在 HBase 表,查询不

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

作者: aaron_ouyang | 来源:发表于2018-04-11 11:22 被阅读2738次

    问题描述

    按照网友提供的 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
    
    1. phoenix 创建表
      create table "test1"(
        pk VARCHAR PRIMARY KEY
        ,"i"."name" VARCHAR
        ,"i"."age" VARCHAR);
    
    1. 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);
    
    1. 必须要表映射,需要禁用列映射规则(会降低查询性能),如下:
      create table "test1"(
        pk VARCHAR PRIMARY KEY
        ,"i"."name" VARCHAR
        ,"i"."age" VARCHAR)
     column_encoded_bytes=0;
    

    参考

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

    相关文章

      网友评论

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

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