一、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;