一、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只需要查找,不需要对数据进行操作
这时需要建立视图,因为视图删除时不会影响到原数据
建映射视图和映射表需要遵循以下几点:
- Phoneix的表名必须和 hbase的 库名.表名一致
- Phoneix的表的主键的列名一般对应rowkey列,名称可以随意,但是类型得匹配!
- Phoneix的表的普通的列名,必须和hbase的列族.列名一致!
- 表映射的结尾,必须添加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;