Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表,插入数据和对HBase数据进行查询。Phoenix完全使用Java编写,作为HBase内嵌的JDBC驱动。Phoenix查询引擎会将SQL查询转换为一个或多个HBase扫描,并编排执行以生成标准的JDBC结果集。
Download:http://phoenix.apache.org/download.html,下载hbase对应版本的phoenix;解压bin.tar.gz包,拷贝phoenix server jar包到hbase集群的每个region server 的lib目录下,然后重启hbase 集群。
1. 连接hbase:
bin/sqlline.py 192.168.31.10:2181
192.168.31.10:2181–> HBase集群配置zookeeper集群的ip地址和端口。
利用!help 查看所有command。

2. 创建表:
create table test (id varchar primary key,name varchar,age integer );
phoenix:

hbase:

Hbase是区分大小写的,Phoenix 默认会把sql语句中的小写转换成大写,再建表,如果不希望转换,需要将表名,字段名等使用引号。Hbase默认phoenix表的主键对应到ROW,column family 名为0,也可以在建表的时候指定column family
phoenix:

hbase:

3. 插入数据
upsert into test(id,name,age) values(‘000001’,’liubei’,43);
phoenix:

hbase:

4. 其他语法
见官网 http://phoenix.apache.org/language/index.html

5. 使用JDBC的方式来对HBase中的数据进行CRUD操作。
phoenix-4.2.2-client.jar(可以在下载的phoenix-4.2.2-bin.tar.gz中找到该jar包)添加到项目的classpath中,将HBase集群的hbase-site.xml配置文件添加到项目的resources目录下。为了查看日志输出配置了一个简单的log4j.properties,也一并放到resources目录下。
log4j.properties 内容如下:


log4j.rootLogger=WARN, A1# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

5.1 获得连接


/*** project:hadoop-phoenix* file:BaseDB.java* time:2015年5月4日 下午2:19:57* description:*/
package cn.com.dimensoft.hadoop.phoenix.jdbc;import java.sql.Connection;
import java.sql.DriverManager;/*** class: BaseDB* package: cn.com.dimensoft.hadoop.phoenix.jdbc* time: 2015年5月4日 下午2:19:57* description: */
public class BaseDB {/*** * name:getConnection* time:2015年5月6日 下午2:07:06* description: get JDBC connection* @return connection*/public static Connection getConnection() {try {// load driverClass.forName("org.apache.phoenix.jdbc.PhoenixDriver");// get connection// jdbc 的 url 类似为 jdbc:phoenix [ :<zookeeper quorum> [ :<port number> ] [ :<root node> ] ],// 需要引用三个参数:hbase.zookeeper.quorum、hbase.zookeeper.property.clientPort、and zookeeper.znode.parent,// 这些参数可以缺省不填而在 hbase-site.xml 中定义。return DriverManager.getConnection("jdbc:phoenix");} catch (Exception e) {e.printStackTrace();return null;}}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

5.2 创建表


/*** * name:create* time:2015年5月4日 下午2:58:31* description:create table*/public static void create() {Connection conn = null;try {// get connectionconn = BaseDB.getConnection();// check connectionif (conn == null) {System.out.println("conn is null...");return;}// check if the table existResultSet rs = conn.getMetaData().getTables(null, null, "USER",null);if (rs.next()) {System.out.println("table user is exist...");return;}// create sqlString sql = "CREATE TABLE user (id varchar PRIMARY KEY,INFO.account varchar ,INFO.passwd varchar)";PreparedStatement ps = conn.prepareStatement(sql);// executeps.execute();System.out.println("create success...");} catch (SQLException e) {e.printStackTrace();} finally {if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

5.3 插入数据


/*** * name:insert* time:2015年5月4日 下午2:59:11* description:*/public static void upsert() {Connection conn = null;try {// get connectionconn = BaseDB.getConnection();// check connectionif (conn == null) {System.out.println("conn is null...");return;}// create sqlString sql = "upsert into user(id, INFO.account, INFO.passwd) values('001', 'admin', 'admin')";PreparedStatement ps = conn.prepareStatement(sql);// execute upsertString msg = ps.executeUpdate() > 0 ? "insert success...": "insert fail...";// you must commitconn.commit();System.out.println(msg);} catch (SQLException e) {e.printStackTrace();} finally {if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

5.4 查询数据


/*** * name:query* time:2015年5月4日 下午3:58:12* description:query data*/public static void query() {Connection conn = null;try {// get connectionconn = BaseDB.getConnection();// check connectionif (conn == null) {System.out.println("conn is null...");return;}// create sqlString sql = "select * from user";PreparedStatement ps = conn.prepareStatement(sql);ResultSet rs = ps.executeQuery();System.out.println("id" + "\t" + "account" + "\t" + "passwd");System.out.println("======================");if (rs != null) {while (rs.next()) {System.out.print(rs.getString("id") + "\t");System.out.print(rs.getString("account") + "\t");System.out.println(rs.getString("passwd"));}}} catch (SQLException e) {e.printStackTrace();} finally {if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

5.5 更新数据


更新数据的操作与插入数据相同
  • 1

5.6 删除数据


/*** * name:delete* time:2015年5月4日 下午4:03:11* description:delete data*/public static void delete() {Connection conn = null;try {// get connectionconn = BaseDB.getConnection();// check connectionif (conn == null) {System.out.println("conn is null...");return;}// create sqlString sql = "delete from user where id='001'";PreparedStatement ps = conn.prepareStatement(sql);// execute upsertString msg = ps.executeUpdate() > 0 ? "delete success...": "delete fail...";// you must commitconn.commit();System.out.println(msg);} catch (SQLException e) {e.printStackTrace();} finally {if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

5.7 删除表


/*** * name:drop* time:2015年5月4日 下午4:03:35* description:drop table*/public static void drop() {Connection conn = null;try {// get connectionconn = BaseDB.getConnection();// check connectionif (conn == null) {System.out.println("conn is null...");return;}// create sqlString sql = "drop table user";PreparedStatement ps = conn.prepareStatement(sql);// executeps.execute();System.out.println("drop success...");} catch (SQLException e) {e.printStackTrace();} finally {if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

参考链接:https://blog.csdn.net/maomaosi2009/article/details/45582321

Phoenix 介绍和基本用法相关推荐

  1. html图片标签img的介绍以及基本用法详解

    <img> 元素向网页中嵌入一幅图像.<img> 标签有两个必需的属性:src 属性 和 alt 属性. 必需的属性 属性 值 描述 alt text 规定图像的替代文本. s ...

  2. jQuery框架的介绍以及基本用法--操作dom

    jQuery框架的介绍以及基本用法–操作dom 概念 jQuery是一个优秀的javascript轻量级框架之一,兼容css3和各大浏览器,提供了dom,events,animate,ajax等简易操 ...

  3. java中dynamic_介绍@dynamic的用法

    介绍@dynamic的用法 Objective-C 2.0提供了属性(@property),可以让编译器自动生成setter和getter方法.如果不想编译器自作主张生成这些setter和getter ...

  4. shell介绍及基本用法

    8.1:shell介绍: shell是一个命令解释器,提供用户和机器之间的交互,支持特定语法,支持逻辑判断.循环,并且每个用户都可以有自己的shell: Centos默认的shell是bash(Bou ...

  5. 求介绍matlab函数用法的书,MATLAB初学者教程--函数用法的简单介绍

    1.4 函数用法的简单介绍 1.4.1什么是函数 似乎很多人一听到函数这个词就会想到数学中的某个概念,然后对于恐惧数学的同学就开始打退堂鼓.在matlab当中到处可以用到函数,它的出现可以让我们用很简 ...

  6. django之ORM介绍与基本用法(一)

    文章目录 ORM介绍 ORM用法 字段类型: 字段选项: 关系字段类型 元选项: 模型成员 Manager:管理器类 自定义管理器类:1.修改原始查询集 自定义管理器类:2.新增管理器方法 ORM介绍 ...

  7. POCO C++ Libraies介绍及常见用法

    POCO C++ Libraies属于功能广泛.轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台.工业自动化等领域. POCO C++ Libraies由多个功能模 ...

  8. Netty5的例子,简单介绍Netty的用法

    转自:http://blog.csdn.net/tjbsl/article/details/51038947 这是一个netty快速入门的例子,也是我的学习笔记,比较简单,翻译于官方的文档整理后把所有 ...

  9. ①HTML介绍及标签用法

    如果您对前端的其它内容的学习感兴趣,可以前往 我的个人主页 翻阅.具体专栏内容如下: HTML和CSS JavaScript jQuery Vue Vue3 React TypeScript uni- ...

最新文章

  1. 禁用任何未使用的端口com_分享连接思科路由器控制台端口的正确设置
  2. asp.net控件开发(二)-简单属性
  3. 质数(Prime_Number)
  4. 51nod 1393 0和1相等串 思路 : map存前缀和
  5. hdu 2037 今年暑假不AC (java)
  6. java实验二 类和对象
  7. 当年资本家倒掉牛奶,到底是怎么回事?
  8. 如何彻底删除nginx
  9. 九大背包问题专题--分组背包问题
  10. silk lobe资源公众号_微小说全免费阅读公众号阅读网资源推荐
  11. ODBC连接MySQL
  12. 文章最重要的并不是原创,而是伪原创
  13. React开发chrome插件系列教程之插件开发环境搭建
  14. 数学建模——Logistic Regression逻辑回归算法(二分类及多分类的Python代码实现)
  15. upload-labs刷关记录
  16. 微信小程序换行符↵转义
  17. 【算法】图像处理在医学领域的应用
  18. Office2010安装步骤
  19. 这种反爬虫手段有点意思,看我怎么把他秒破了
  20. 安装完CentOS 7 后必做的七件事

热门文章

  1. 小学计算机知识竞赛活动方案,小学生知识竞赛活动方案
  2. matplotlib显示灰度图为紫色的问题
  3. 没有契合的数据库迁移工具,用pymysql实现一个
  4. 乔布斯在斯坦福大学的演讲感悟
  5. 单词2016.8.3
  6. 天龙3d服务器维护,【公告】天龙八部手游03月24日维护更新公告
  7. linux网卡接收raw,网络数据接收过程分析(三)---RAW数据接收(1)
  8. CentOS6和CentOS7 一键更换内核,一键安装锐速
  9. wx-extend/validate库的使用
  10. 要赶超耐克中国?安踏集团2021年收入劲增至近500亿元,FILA品牌贡献近半 | 美通社头条...