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. leetcode面试准备:Decode Ways
  2. Java之品优购课程讲义_day20(5)
  3. iframe在ipad safari的显示
  4. 马来西亚什么时候学计算机,关于马来西亚大学里的计算机专业,你知道多少?...
  5. java重定向并保持同一个会话_当会话在Java Web应用程序中过期时,如何重定向到登录页面?...
  6. Vue+SpringBoot的微信登录
  7. 【java】蔡勒公式计算星期(switch语句方法和数组方法)
  8. 外观检验人员一致性(Kappa)分析
  9. git 提交代码报错,提示邮箱格式不正确
  10. 4ye含泪用python爬取了自己的公众号粉丝数据
  11. 针对IE浏览器的兼容性ie7、ie8、ie9
  12. 报错:Entering emergency mode. Exit the shell to continue 解决
  13. DLP是如何防止数据泄露的?
  14. 什么是信息增益(Information Gain)
  15. 【开发日记】马桶型号识别
  16. win10 x64下的DNW驱动不完全安装方法
  17. shrio简介--w3cschool
  18. 坚果保龄球题解(c++)
  19. 曼昆宏观经济学第8版笔记及课后答案
  20. Python微信打飞机游戏编程学习笔记01

热门文章

  1. UE5引擎 PC端的Landscape渲染浅分析
  2. 用C语言循环结构编写一个程序实现求5的阶乘。
  3. 智慧城市:社会综合治理平台建设解决方案
  4. astar不能用了_电脑上的alt+a不能用了怎么回事
  5. MySQL八小时时间差
  6. 菜鸟对付最流行的几种捆绑器
  7. jqGrid 数据加载完事件 loadComplete 使用
  8. iMAIL邮件监控程序终于可以试用了
  9. Android系统手动创建虚拟内存swap
  10. 用CMD命令清理电脑垃圾