1.先開啓schema與namespace的對應關係
在phoenix中與hbase的命名空間相對應的是schema概念,默認是沒有開啓的,需要在hbase的hbase-site.xml中增加以下配置項
<property>
<name>phoenix.schema.isNamespaceMappingEnabled</name>
<value>true</value>
</property>
<property>
<name>phoenix.schema.mapSystemTablesToNamespace</name>
<value>true</value>
</property>
如果你是用apache原生框架搭的集羣,只能去每臺集羣的hbase目錄下手動修改了,要是搭建的cdh集羣,則可以在cloudera manager界面去修改,一般我會把hbase的服務端和客戶端都改一下。2.hbase中建有命名空間的表
create_namespace 'binlog'
create 'binlog:student','cf'
put 'binlog:student','1001','info:name','roma'
put 'binlog:student','1001','info:sex','male'
put 'binlog:student','1001','info:age','18'
put 'binlog:student','1002','info:name','xdxh'
put 'binlog:student','1002','info:sex','female'
put 'binlog:student','1002','info:age','20'
scan 'binlog:student'
3.phoenix映射操作:
首先創建與命名空間對應的schema,如果不創建的話,會報錯
"Schema does not exist schemaName=binlog (state=43M05,code=722)"
CREATE SCHEMA IF NOT EXISTS "binlog";
映射視圖view。視圖只是供查詢操作,不能修改數據,當刪除視圖的時候,對hbase中的源表不會有影響
CREATE VIEW "binlog"."student"(
"ROW" varchar primary key,
"info"."age" varchar,
"info"."name" varchar,
"info"."sex" varchar
)
映射表table,表可以查詢及修改數據,當刪除表的時候,hbase中的源數據表也會被刪除(view無法upsert ,table可以upsert)
CREATE TABLE "binlog"."student"(
"ROW" varchar primary key,
"info"."age" varchar,
"info"."name" varchar,
"info"."sex" varchar
) column_encoded_bytes=0; //禁用列映射
映射成功
4.遺留bug
我映射建表的時候所有字段都是varchar類型,也只有全是varchar類型的時候才能映射成功。
hbase中的數據都是二進制的,所以加了類型需要反序列化二進制,
我在官網上查到phoenix映射存在的hbase表部分數字類型和日期類型需要使用unsigned類型,
但當我改爲
CREATE TABLE "binlog"."student"(
"ROW" varchar primary key,
"info"."age" UNSIGNED_INT,
"info"."name" varchar,
"info"."sex" varchar
) column_encoded_bytes=0;
還是會報錯:Illegal data. Expected length of at least 58 bytes, but had 32 (state=22000,code=201)
映射失敗,查不出數據
這個問題一直沒有解決
————————————————
版權聲明:本文爲CSDN博主「XDSXHDYY」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/XDSXHDYY/article/details/96461576