phoenix建表映射有命名空間的hbase表

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章