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表结构进行一些设置

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一纸春秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值