• 利用Phoenix映射Hbase表来进行操作


    一、Hbase无表数据

    这种情况需要由Phoenix来建映射表

    建表语句示例

    CREATE TABLE IF NOT EXISTS us_population (
          state CHAR(2) NOT NULL,
          city VARCHAR NOT NULL,
          population BIGINT
          CONSTRAINT my_pk PRIMARY KEY (state, city));

    此处用的联合主键,当然也支持单个主键

    注意:在Phoenix中创建的映射表删除时也会将Hbase中的表删除

     

    在建表时,小写的表名或列名,都会自动在sqlline.py中转为大写!这样在查询时,只能使用大写进行查询!

    如果必须使用小写,需要在表名等字段上添加双引号,建议不要使用小写的表名或字段!

     

    二、Hbase有表数据

    2.1只需要查找,不需要对数据进行操作

    这时需要建立视图,因为视图删除时不会影响到原数据

    建映射视图和映射表需要遵循以下几点:

    1. Phoneix的表名必须和 hbase的 库名.表名一致
    2. Phoneix的表的主键的列名一般对应rowkey列,名称可以随意,但是类型得匹配!
    3. Phoneix的表的普通的列名,必须和hbase的列族.列名一致!
    4. 表映射的结尾,必须添加column_encoded_bytes=0,不然无法从hbase中查询到数据的!

    示例:

    Habse表如下

     建表语句

    create view if not exists "stu"(
       "id" varchar primary key,
       "info1"."name" varchar ,
       "info1"."age" varchar
       )column_encoded_bytes=0;

    2.2需要对数据进行操作

    此时就只能用映射表来操作

    create table if not exists "stu"(
       "id" varchar primary key,
       "info1"."name" varchar ,
       "info1"."age" varchar
       )column_encoded_bytes=0;

    注意点:映射带命名空间的表

    带命名空间的表在进行映射时,必须参照这个博文里的方法进行配置

    https://blog.csdn.net/xdsxhdyy/article/details/96461576

    除了hbase的hbase-site.xml 要配置,phoenix 的bin/hbase-site.xml也要配置,否则会报错

    Ensure that config phoenix.schema.isNamespaceMappingEnabled is consitent on client and server

    然后再创建与hbase同名的schema

    create schema "myns";

    建表语句

    create table  "myns"."t1"(
       "id" varchar(20) primary key,
       "info1"."name" varchar (20)  
       )column_encoded_bytes=0;
  • 相关阅读:
    nyoj 16 矩形嵌套
    nyoj 44 子串和
    nyoj 448 寻找最大数
    nyoj 14 会场安排问题
    hdoj 1008 Elevator
    bzoj1588
    bzoj3224
    bzoj1503
    bzoj1834
    bzoj1066
  • 原文地址:https://www.cnblogs.com/yangxusun9/p/12555413.html
Copyright © 2020-2023  润新知