shell

Phoenix Shell操作

0)连接Phoenix

  1. [atguigu@hadoop102 phoenix]$ bin/sqlline.py hadoop102,hadoop103,hadoop104:2181

1)表的操作
1)显示所有表

  1. !table !tables

(2)创建表
1)直接指定单个列作为RowKey

  1. CREATE TABLE IF NOT EXISTS student(
  2. id VARCHAR primary key,
  3. name VARCHAR);

在phoenix中,表名等会自动转换为大写,若要小写,使用双引号,如”us_population”

2)指定多个列的联合作为RowKey

  1. CREATE TABLE IF NOT EXISTS us_population (
  2. State CHAR(2) NOT NULL,
  3. City VARCHAR NOT NULL,
  4. Population BIGINT
  5. CONSTRAINT my_pk PRIMARY KEY (state, city));

(4)插入数据

  1. upsert into student values('1001','zhangsan');

(5)查询记录

  1. select * from student;
  2. select * from student where id='1001';

(6)删除记录

  1. delete from student where id='1001';

(7)删除表、清空表

  1. drop table student;
  2. delete from tb;
  3. 清空表中所有记录,Phoenix中不能使用truncate table tb

(8)退出命令行

  1. !quit

2)表的映射
(1)表的关系
默认情况下,直接在HBase中创建的表,通过Phoenix是查看不到的。
如果要在Phoenix中操作直接在HBase中创建的表,则需要在Phoenix中进行表的映射。(不映射,默认在0列簇下创建限定符)
映射方式有两种:视图映射和表映射。
2)命令行中创建表test
HBase 中test的表结构如下,两个列族info1、info2。

Rowkey info1 info2
id name address

启动HBase Shell

  1. [atguigu@hadoop102 ~]$ /opt/module/hbase/bin/hbase shell

创建HBase表test

  1. hbase(main):001:0> create 'test','info1','info2

(3)视图映射(总结:加上列簇即可映射)【注意字段大小写问题和利用双引号】
Phoenix创建的视图是只读的(在TABLE_TYPE处标记VIEW),所以只能用来做查询,无法通过视图对源数据进行修改等操作。在phoenix中创建关联test表的视图

  1. 0: jdbc:phoenix:hadoop101,hadoop102,hadoop103>
  2. create view "test"(id varchar primary key,"info1"."name" varchar, "info2"."address" varchar);

删除视图

  1. 0: jdbc:phoenix:hadoop101,hadoop102,hadoop103> drop view "test";

4)表映射(总结:加上列簇即可映射)【注意字段大小写问题和利用双引号】
使用Apache Phoenix创建对HBase的表映射,有两种方法:(存在则关联,不存在则创建)
a.HBase中不存在表时,可以直接使用create table指令创建需要的表,系统将会自动在Phoenix和HBase中创建person_infomation的表,并会根据指令内的参数对表结构进行初始化。
b.当HBase中已经存在表时,可以以类似创建视图的方式创建关联表,只需要将create view改为create table即可。

  1. 0: jdbc:phoenix:hadoop101,hadoop102,hadoop103>
  2. create table "test"(id varchar primary key,"info1"."name" varchar, "info2"."address" varchar)column_encoded_bytes=0;

column_encoded_bytes=0;配置在hbase可以解码列限定符(字段),让其在hbase显示正常字符,原本是按补码的形式存储着

(5)命名空间表映射[](不要配,会影响后面项目)
Phoenix默认不能映射命名空间的表,只能在default映射表,如果需要映射则修改hbase的hbase-site.xml与phoenix中的hbase-site.xml
1) 修改/opt/module/hbase/conf/hbase-site.xml与/opt/module/phoenix/bin/hbase-site.xml的配置文件

  1. <property>
  2. <name>phoenix.schema.isNamespaceMappingEnabled</name>
  3. <value>true</value>
  4. </property>
  5. <property>
  6. <name>phoenix.schema.mapSystemTablesToNamespace</name>
  7. <value>true</value>
  8. </property>

2) 分发/opt/module/hbase/conf/hbase-site.xml

[atguigu@hadoop102 phoenix] xsync /opt/module/hbase/conf/hbase-site.xml

3) 创建schema

0: jdbc:phoenix:hadoop101,hadoop102,hadoop103> create schema "big"

注意: schema的名称必须与命名空间的名称一致
4)使用schema

0: jdbc:phoenix:hadoop101,hadoop102,hadoop103> use "big"

5) 建立映射

0: jdbc:phoenix:hadoop101,hadoop102,hadoop103>create table "big"."person"(
0: jdbc:phoenix:hadoop101,hadoop102,hadoop103>id varchar primary key,
0: jdbc:phoenix:hadoop101,hadoop102,hadoop103>"base_info"."name" varchar,
0: jdbc:phoenix:hadoop101,hadoop102,hadoop103>"base_info"."age" varchar)COLUMN_ENCODED_BYTES=0