• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
一纸春秋
帮助2

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhhkikkf
系列文章
更多 icon
同类精品
更多 icon
继续加载