Mac安装Apache Phoenix

一:简介

Phoenix使用的SQL和关系型数据库中的SQL不太一样,稍微有些改动,但是大致思想是一样的。
Apache Phoenix 官方站点:https://phoenix.apache.org/

二:安装

  1. 官网下载和自己实际安装的HBase版本一致的phoenix 版本,我的HBase版本为1.2.9,这里我选择apache-phoenix-4.14.1-HBase-1.2下载并解压到合适的目录下,这里我放在/usr/local/Cellar/下在这里插入图片描述
  2. 将apache-phoenix-4.14.1-HBase-1.2目录下的phoenix-4.14.1-HBase-1.2-server.jar和phoenix-core-4.14.1-HBase-1.2.jar放到HBase的lib目录下(/usr/local/Cellar/hbase/1.2.9/libexec/lib)
    在这里插入图片描述
  3. 重启HBase
cd /usr/local/Cellar/hbase/1.2.9/bin
./stop-hbase.sh
./start-hbase.sh
  1. 启动phoenix shell
cd /usr/local/Cellar/phoenix/apache-phoenix-4.14.1-HBase-1.2-bin/bin
./sqlline.py localhost:2181

在这里插入图片描述
5. 执行sql测试
注意:这里的sql和关系型数据库中的sql不完全一致。

create table test (id varchar primary key, name varchar, age integer);
upsert into test(id,name,age) values('1','mengday',26);
select * from test;

在这里插入图片描述

三:Phoenix支持的数据类型

Phoenix支持的数据类型DataTypes:https://phoenix.apache.org/language/datatypes.html
在这里插入图片描述

四:Phoenix支持的函数

Phoenix 支持的函数:https://phoenix.apache.org/language/functions.html
在这里插入图片描述

五:Phoenix 支持的SQL语句

Phoenix支持的sql语句: https://phoenix.apache.org/language/index.html
在这里插入图片描述

六:示例

1. 查看所有表

# 两个命令效果一样
!tables
!table

在这里插入图片描述

2. 创建表CREATE

创建表时默认表名和字段名都是大写的,如果要小写,需要使用双引号来引住,如"tbl_test"
列族下有多个限定符(子列)使用 列族名.限定符名 来指定。

支持联合主键:CONSTRAINT pk PRIMARY KEY (column1, column2)

CREATE TABLE IF NOT EXISTS tbl_test (
	id BIGINT not null primary key,
	username char(10),
	age unsigned_tinyint,
	address.province varchar,
	address.city varchar,
	address.area varchar,
	created_time date
) TTL=86400, VERSIONS=1;

在这里插入图片描述

3. 修改表

# 添加列, 也支持一次添加多个列,用逗号分隔
ALTER TABLE tbl_test ADD status boolean VERSIONS=1;

# 删除列
ALTER TABLE <TableName> DROP COLUMN <column1>, <column2>;
# 设置表的参数
ALTER TABLE <TableName> SET IMMUTABLE_ROWS=true, DISABLE_WAL=true;
# 删除视图中的字段
ALTER VIEW <ViewName> DROP COLUMN <column1>;

4. 查看表结构

!describe 表名;

5. 插入或修改记录

UPSERT既可以insert也可以update

# 插入记录
UPSERT INTO tbl_test VALUES (1, 'mengday', 28, '上海市', '浦东新区', '张江镇', '2019-03-14 16:42:40', true);
UPSERT INTO tbl_test VALUES (2, 'vbirdbest', 29, '北京市', '朝阳区', '朝外街道', '2019-04-14 16:42:40', false);
UPSERT INTO tbl_test VALUES (3, 'zhangsan', 30, '上海市', '浦东新区', '张江镇', '2019-05-14 16:42:40', false);
UPSERT INTO tbl_test VALUES (4, 'lisi', 31, '上海市', '浦东新区', '唐镇', '2019-06-14 16:42:40', true);

# 修改数据
UPSERT INTO tbl_test(id, status) VALUES (1, false);
# 当id主键重复时执行update子句
upsert into tbl_test(id, age) values(1, 18) on duplicate key update age = age + 1;
# 主键存在就忽略,此时相当于insert操作
upsert into tbl_test(id, age) values(1, 18) on duplicate key ignore;

# upsert select 从以表中查询数据插入到另一个表中(插入的表必须预先创建好)
CREATE TABLE IF NOT EXISTS tbl_tmp (
	id BIGINT not null primary key,
	username char(10)
);	

upsert into tbl_tmp(id, username) select id, username from tbl_test where id > 2;

6. 查询数据

支持where、order by、group by, having、union all、limit:查询限制的条数, offset:偏移量,limit和offset可用于分页。

select * from tbl_test;
select * from tbl_test where age >= 29 order by age desc limit 2 offset 1;
select username, age from tbl_test  where id = 1 union all select username, age from tbl_test where id = 2;

在这里插入图片描述

select 也支持多表连接查询(inner join、letf join、right join)

CREATE TABLE IF NOT EXISTS tbl_score (
	id BIGINT not null primary key,
	user_id bigint,
	course char(20),
	score double
);

upsert	into tbl_score(id, user_id, course, score) values(1, 1, 'china', 99.5);
upsert	into tbl_score(id, user_id, course, score) values(2, 1, 'english', 80);

# 关联查询
select t.id, t.username, s.score from tbl_test t join tbl_score s on t.id = s.user_id;
select t.id, t.username, s.score from tbl_test t inner join tbl_score s on t.id = s.user_id;
select t.id, t.username, s.score from tbl_test t left join tbl_score s on t.id = s.user_id;
select t.id, t.username, s.score from tbl_score s right join tbl_test t  on t.id = s.user_id;

7. 索引index

CREATE INDEX <索引名称> ON <表名>(<字段名> 排序);
DROP INDEX IF EXISTS <索引名称>;

CREATE INDEX idx_username ON tbl_test(username ASC);

8. 计划分析explain

explain <SQL语句>

9. 删除记录

DELETE FROM tbl_test WHERE id = 1

10. 删除表

drop table [if exists] <table_name>

11. 创建函数

创建函数时,函数体的实现可直接调用Java中.jar包来作为实现, 具体类文件如何声明请查看官网

create function <fun_name>(args...) returs <DataType> as '类的完全限定名' using jar 'hdfs:/localhost:8080/hbase/lib/myFun.jar'

12. 删除函数

DROP FUNCTION IF EXISTS <fun_name>

13. 序列 Sequence

序列(Sequence)是Phoenix提供的允许产生单调递增数字的一个SQL特性,序列会自动生成顺序递增的序列号,以实现自动提供唯一的主键值。

# 语法
CREATE SEQUENCE <sequence_name> 
[start with 起始值]
[increment by 步长]
[minvalue 最小值]
[maxvalue 最大值]
[cycle]
[cache 循环次数]

# 删除
DROP SEQUENCE IF EXISTS <sequence_name>
  • sequence_name:序列名
  • increment by:可选子句,表示序列的增量,正数表示生成一个递增的序列,负数表示生成一个递减的序列,其默认值是1.
  • minvalue:可选子句,决定序列生成的最小值
  • maxvalue:可选子句,决定序列生成的最大值
  • start:可选子句,指定序列的开始位置,默认递增序列的起始值为minvalue,递减序列的起始值为maxvalue.
  • cache:可选子句,决定是否产生序列号预分配并存储在内存中。
  • cycle:可选关键字,当序列达到最大值或者最小值时,可以继续复位下去;如果是递增系列达到maxvalue,它将又从minvalue继续递增,如果是递减系列达到minvalue,它将从maxvalue继续递减。如果忽略该关键,当其他达到最大值或者最小时仍继续递增/减时将会返回一个错误。
# 创建序列
CREATE SEQUENCE my_seq;
CREATE SEQUENCE my_seq START WITH 1 INCREMENT BY 1;


# 获取序列的下一个值
SELECT NEXT VALUE FOR my_seq FROM tbl_tmp;
# 获取当前序列值
SELECT CURRENT VALUE FOR my_seq FROM tbl_tmp;

# 插入值时使用序列
upsert into tbl_tmp(id, username) values(NEXT VALUE FOR my_seq, 'xxx')

14. SCHEMA

CREATE SCHEMA IF NOT EXISTS <scheme_name>
USE <scheme_name>
DROP SCHEMA IF EXISTS <scheme_name>

15. 退出shell

!quit

七:常见错误

在执行sqlline.py有时会报错,这里记录了遇见的错误:

1. Error: SYSTEM.CATALOG (state=08000,code=101)

org.apache.phoenix.exception.PhoenixIOException: SYSTEM.CATALOG

cd /usr/local/Cellar/hbase/1.2.9/bin
hbase zkcli
ls /hbase/table
# 如果有下面的表:SYSTEM.CATALOG, SYSTEM.SEQUENCE, SYSTEM.STATS, and SYSTEM.FUNCTION,则执行如下命令
rmr /hbase/table/SYSTEM.CATALOG
rmr /hbase/table/SYSTEM.SEQUENCE
rmr /hbase/table/SYSTEM.STATS
rmr /hbase/table/SYSTEM.FUNCTION
rmr /hbase/table/SYSTEM.MUTEX

# 重新进入shell
cd /usr/local/Cellar/phoenix/apache-phoenix-4.14.1-HBase-1.2-bin/bin
./sqlline.py localhost:2181

SQuirreL SQL Client 安装

SQuirrel下载页面:http://squirrel-sql.sourceforge.net/#installation

  1. 去下载页面squirrel-sql-3.9.1-MACOSX-install.jar
  2. 通过执行jar文件来打开安装界面 java -jar squirrel-sql-3.7-MACOSX-install.jar (在我的电脑上3.7之上的版本都打不开闪退)
  3. 将/usr/local/Cellar/phoenix/apache-phoenix-4.14.1-HBase-1.2-bin/phoenix-4.14.1-HBase-1.2-client.jar 复制到/Applications/SQuirreLSQL.app/Contents/Resources/Java/lib
    在这里插入图片描述
  4. 启动App切换到Drivers并新建一个Driver
    在这里插入图片描述
    在这里插入图片描述
    设置Driver的Name为Phoenix;Example URL为 jdbc:phoenix:localhost,其中的localhost为hbase使用的Zookeeper主机名;设置Class Name文本框的内容为 org.apache.phoenix.jdbc.PhoenixDriver
    在这里插入图片描述
  5. 切换到Aliases中,新建一个Aliase, name随便起名(可以用 数据库名+IP地址作为连接名),这里命名为ApachePhoenix,Driver选择刚才创建的Phoenix驱动,用户名和密码不用填

在这里插入图片描述

  1. 连接
    在这里插入图片描述
    在这里插入图片描述
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风流 少年

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

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

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

打赏作者

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

抵扣说明:

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

余额充值