二、Phoenix Shell 的使用
1,进入 Phoenix 命令行
(1)执行如下命令进入 phoenix 的终端(启动脚本 sqlline.py 参数是 Zookeeper 节点)
sqlline.py localhost:2181
(2)首次进入 phoenix 终端会自动建立的 phoenix 系统表,我们执行如下命令可以查看当前所有的表:
!table
(3)执行如下命令则可退出 phoenix 的终端:
!exit
2,新建表
(1)执行下面命令创建一个名为 student 的表,如果没有明确定义任何列族,则将一个空键值作为默认列族:
注意:在 phoenix 中,默认情况下,库名,表名,字段名等会自动转换为大写,若要小写,使用双引号,如 "student"。
CREATE TABLE IF NOT EXISTS "student"( id VARCHAR primary key, name VARCHAR, age VARCHAR);
创建后执行 !table 命令可以看到新创建的表:
在 HBase Shell 中执行 describe "student" 命令查看表信息,可以发现映射过来的表列簇默认是 0:
(2)我们也可以在创建时指定列簇,比如下面我们指定列族为 info(如果所引用的列族不存在,则将创建它们):
CREATE TABLE IF NOT EXISTS "student"( id VARCHAR primary key, info.name VARCHAR, info.age VARCHAR);
在 HBase Shell 中执行 describe "student" 命令查看表信息,可以发现映射过来的表列簇变成了 info:
3,删除表
执行如下命令可以删除 studnet 表:
drop table "student";
4,表数据的增删改查
(1)使用 upsert 可以进行数据的插入或者更新:
注意:upsert 相当于 updata 与insert 的结合,当表中的主键不存在就是插入,存在就是更新。
upsert into "student" values('1001','大刘','20'); upsert into "student" values('1002','小星','22');
(2)使用 select 语句可以进行数据的查询:
select * from "student";
(3)使用 delete 语句可以删除数据:
delete from "student" where id='1002';
附:执行 SQL 脚本、导入数据
1,执行 SQL 脚本
(1)在 Phoenix 安装包 examples 目录下有一些官方样例,其中 STOCK_SYMBOL.sql 内容如下:
CREATE TABLE IF NOT EXISTS STOCK_SYMBOL (SYMBOL VARCHAR NOT NULL PRIMARY KEY, COMPANY VARCHAR); UPSERT INTO STOCK_SYMBOL VALUES ('CRM','SalesForce.com'); SELECT * FROM STOCK_SYMBOL;
(2)我们要执行这个 sql 文件,只需要在执行 sqlline.py 时添加 SQL 文件参数即可:
sqlline.py localhost:2181 STOCK_SYMBOL.sql
(3)可以看到 sql 脚本自动执行成功:
2,导入数据
(1)如果需要导入数据,我们可以使用 bin/psql.py 加载 CSV 数据或执行 SQL 脚本(其中 -t 后面是表名):
./bin/psql.py -t STOCK_SYMBOL localhost:2181 ./examples/STOCK_SYMBOL.csv
(2)STOCK_SYMBOL.csv 同样是 Phoenix 安装包 examples 目录下的官方样例,其中数据的分隔符是逗号:
(3)如果上面命令执行后报如下错误:
java.sql.SQLException: ERROR 726 (43M10): Inconsistent namespace mapping properties. Cannot initiate connection as SYSTEM:CATALOG is found but client does not have phoenix.schema.isNamespaceMappingEnabled enabled
(4)打开 psql.py 查看对应查找的系统变量是哪个:
(5)然后编辑 /etc/profile,在尾部添加这个系统变量(指向 HBase 的 conf 目录):
(6)然后执行如下命令使配置生效:
source /etc/profile
(7)最后再次执行导入命令,执行成功后查看 STOCK_SYMBOL 表可以看到数据已经插入进来了