2.3 Phoenix 表映射

2.3.1 Phoenix 表和 HBase 表的关系

默认情况下, 直接在 HBase 中创建的表通过 Phoenix 是查不到的.

如果要在 Phoenix 中操作直接在 HBase 中创建的表,则需要在 Phoenix 中进行表的映射。

映射方式有两种:

  1. 视图映射
  2. 表映射

2.3.2 准备工作

在 HBase 中创建表: test, 两个列簇namecompany.

  1. 启动 HBase shell

  2. 创建表: test

     create 'test', 'name', 'company'
    

    在 Phoenix 中是看不到这个表的:

2.3.3 视图映射

Phoenix 创建的视图是只读的, 所以只能用来查询, 无法通过视图对数据进行修改等操作.

create view "test"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar);

2.3.4 表映射

使用 Phoenix创建对 HBase 的表映射,有两种方法:

  1. 当 HBase 中已经存在表时,可以以类似创建视图的方式创建关联表,只需要将create view 改为 create table 即可。 在 HBase 中创建表:

    create 'test1', 'name', 'company'
    

    在 Phoenix 中创建关联表:

    create table "test1"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar) column_encoded_bytes=0;
    

    说明: 添加这个参数之后, 在 HBase 中添加的数据在 Phoenix 中也可以查询到. 否则 HBase 中添加的数据在 Phoenix 中查询不到.

  2. 当 HBase 中不存在表时,可以直接使用 create table 指令创建需要的表,系统将会自动在 Phoenix 和 HBase 中创建 person_infomation 的表,并会根据指令内的参数对表结构进行初始化。

2.3.5 视图映射和表映射的对比与总结

相比于直接创建映射表,视图的查询效率会低, 原因是:创建映射表的时候,Phoenix 会在表中创建一些空的键值对,这些空键值对的存在可以用来提高查询效率。

使用create table创建的关联表,如果对表进行了修改,源数据也会改变,同时如果关联表被删除,源表也会被删除。但是视图就不会,如果删除视图,源数据不会发生改变。

results matching ""

    No results matching ""