栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Phoenix笔记 —— 视图映射与关联表映射

Phoenix笔记 —— 视图映射与关联表映射

phoenix可以用sql语句的形式来操作hbase数据库中的数据,并且phoenix可以支持大部分的mysql里面的sql语法与格式。因此具体的操作,比如增删改查本篇博客不记录了,与mysql里面的sql语句差不多。
但是需要注意以下,phoenix的插入语句不是insert,而是upsert
upsert into “表名” values()

这里记录一下phoenix与hbase的表的映射
一般情况下,phoenix是查看不到在hbase中创建的表。因此如果想要在phoenix中操作hbase中的表,就需要通过表映射的操作。

映射方式有两种:视图映射与表映射

视图映射

在phoenix中创建hbase的表的视图,视图只能用来查询,不能通过视图对源数据(hbase的表中存储的数据)进行增删改等操作

先在hbase里面创建一张表

hbase(main):007:0> create 'student','name','age'

往表中插入一条数据

put 'student','1001','name:firstname','zhang1'
put 'student','1001','name:lastname','zhang2'
put 'student','1001','age:big','18'
put 'student','1001','age:small','17'

插入数据完成后,在phoenix中创建这张表的视图

create view "student"(
studentid varchar primary key,
"name"."firstname" varchar,
"name"."lastname"  varchar,
"age"."big"  varchar,
"age"."small" varchar
)column_encoded_bytes=0;


查询一下视图里面的数据
在phoenix查询数据时,要将给表名加上双引号

测试一下能否在视图中修改数据

发现会报错,提示视图是 read only,只读不能修改

那么接下来再测试一下,如果将hbase中的表删除(即删除源数据)

hbase(main):013:0> disable 'student';
hbase(main):014:0* drop 'student';


再到phoenix里面查询视图student里面的数据,就会报错

但是用 !table 查询全部的表时,会发现依旧还有 student视图的记录,此时还需要删除一下这个视图

表映射

在phoenix中使用建表语句,create table 表名分为两种情况,(假设这里要在phoenix中创建student表)

  1. Hbase中存在student表,则phoenix的建表语句本质上不是创建一张新表,而是类似于创建Hbase表的视图的方式,创建一张关联表。
  2. Hbase中不存在student表,则phoenix的建表语句是在创建一张新的表

这里再到hbase中将上面删去的student表重新创建回来并且加载数据
然后到phoenix中输入以下的建表语句

create table "student" (
empid varchar primary key,
"name"."firstname" varchar,
"name"."lastname"varchar,
"age"."big"  varchar,
"age"."small" varchar
)column_encoded_bytes=0;


注意这里的Table_type,表的类型是table,而不是视图
现在查询一下表里面的数据

这里就会发现phoenix这里创建的是关联表,关联的是hbase中的同名表的数据

修改一下源数据的数据

hbase(main):021:0> put 'student','1001','name:firstname','chen1'

再来查看一下phoenix表中的数据

发现这里的数据也发生了改变

那么现在修改phoenix里面的数据,来看看hbase里面的源数据会不会发生变动

upsert into "student" values('1002','wang1','wang2','12','11');


这里就需要强调一下视图与关联表的区别了

  1. 关联表的数据可以改变,并且会影响hbase里面的数据
  2. 视图里面的数据不能改变
  3. 删除关联表,会导致源表也被删除
  4. 删除视图,不会影响到hbase中的源表

前面尝试了在phoenix中创建关联表,现在创建一张hbase中没有的表试试看

create table "teacher" (
empid varchar primary key,
"name"."firstname" varchar,
"name"."lastname"varchar,
"age"."big"  varchar,
"age"."small" varchar
)column_encoded_bytes=0;



在phoenix里面创建了一张新表,那么hbase中也会出现一张一样的表
因此在phoenix里面创建表的时候可以根据需要对Hbase表结构进行一些设置

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/632831.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号