!tables
# 或者
!table
CREATE TABLE IF NOT EXISTS us_population (
state CHAR(2) NOT NULL,
city VARCHAR NOT NULL,
population BIGINT
CONSTRAINT my_pk PRIMARY KEY (state, city));
说明:
// Phoenix内不支持inset插入,要不然会出错
insert into us_population values('NY','NewYork',8143197);
upsert into us_population values('NY','NewYork',8143197);
upsert into us_population values('CA','Los Angeles',3844829);
upsert into us_population values('IL','Chicago',2842518);
说明: upset可以看成是update和insert的结合体.
select * from US_POPULATION;
select * from us_population where state='NY';
delete from us_population where state='NY';
drop table us_population;
! quit
默认情况下, 直接在 HBase 中创建的表通过 Phoenix 是查不到的.
如果要在 Phoenix 中操作直接在 HBase 中创建的表,则需要在 Phoenix 中进行表的映射。 映射方式有两种:
在 HBase 中创建表: test, 两个列簇name、company.
// 另开一台窗口启动Hbase
[bigdata@hadoop002 hbase]$ bin/hbase shell
create 'test', 'name', 'company'
在 Phoenix 中是看不到这个表的:
Phoenix 创建的视图是只读的, 所以只能用来查询, 无法通过视图对数据进行修改等操作.
// 1. 创建
create view "test"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar);
// 2. 查找
select * from "test";
使用 Phoenix创建对 HBase 的表映射,有两种方法:
在 HBase 中创建表:
create 'test1', 'name', 'company'
在 Phoenix 中创建关联表:
create table "test1"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar) column_encoded_bytes=0;
说明: 添加这个参数之后, 在 HBase 中添加的数据在 Phoenix 中也可以查询到. 否则 HBase 中添加的数据在Phoenix 中查询不到.
相比于直接创建映射表,视图的查询效率会低, 原因是:创建映射表的时候,Phoenix 会在表中创建一些空的键值对,这些空键值对的存在可以用来提高查询效率。 使用create table创建的关联表,如果对表进行了修改,源数据也会改变,同时如果关联表被删除,源表也会被删除。但是视图就不会,如果删除视图,源数据不会发生改变。
本次的分享就到这里了