Phoenix-5.0.0 分布式数据库SQL组件 实验示例
2019-05-22 本文已影响0人
Iggi_128
大家好,我是Iggi。
今天我给大家分享的是Phoenix-5.0.0版本的实验示例。
首先用一段文字简介Phoenix:
Phoenix是构建在HBase上的一个SQL组件,能让我们用标准的JDBC APIs来操作HBase数据库进行创建表,插入数据和数据查询等常规操作。
Phoenix完全使用Java编写,作为HBase内嵌的JDBC驱动。Phoenix查询引擎会将SQL查询转换为一个或多个HBase扫描,并编排执行以生成标准的JDBC结果集。直接使用HBase API、协同处理器与自定义过滤器,对于简单查询来说,其性能量级是毫秒,对于百万级别的行数来说,其性能量级是秒。

想更深入的了解Phoenix知识的同学可以参考以下连接:
http://phoenix.apache.org/presentations/OC-HUG-2014-10-4x3.pdf
好,下面进入正题。介绍Java操作Phoenix示例。
首先,使用IDE建立Maven工程,建立工程时没有特殊说明,按照向导提示点击完成即可。重要的是在pom.xml文件中添加依赖包,内容如下图:

展示实验代码如下:
package linose.hbase;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//import org.apache.log4j.BasicConfigurator;
/**
* Hello Phoenix!
*
*/
public class AppPhoenix {
public static void main( String[] args ) throws IOException, SQLException
{
/**
* 设定MapReduce示例拥有HBase的操作权限
*/
System.setProperty("HADOOP_USER_NAME", "hbase");
/**
* 为了清楚的看到输出结果,暂将集群调试信息缺省。
* 如果想查阅集群调试信息,取消注释即可。
*/
//BasicConfigurator.configure();
/**
* 连接Phoenix数据库
*/
String zookeeper = "jdbc:phoenix:master1.linose.cloud.beijing.com,master2.linose.cloud.beijing.com,master3.linose.cloud.beijing.com:2181";
Connection conn = DriverManager.getConnection(zookeeper);
if (null != conn) {
System.out.println("连接Phoenix成功");
}
/**
* 创建表,创建语句对象 id BIGINT not null primary key
*/
String sql = "CREATE TABLE IF NOT EXISTS PHOENIX_SCHEMA.EMPLOYEE (" +
"ID BIGINT NOT NULL PRIMARY KEY," +
"BASIC.NAME VARCHAR," +
"BASIC.AGE SMALLINT," +
"BASIC.GENDER BOOLEAN," +
"DEPART.DEPARTMENT VARCHAR," +
"DEPART.POST VARCHAR" +
")";
System.out.println("创建SQL语句对象");
Statement statement = conn.createStatement();
int result = statement.executeUpdate(sql);
conn.commit();
System.out.println("创建PHOENIX_SCHEMA.EMPLOYEE表成功");
/**
* 写入数据
*/
sql = "UPSERT INTO PHOENIX_SCHEMA.EMPLOYEE VALUES(1,'Iggi', 33, true, 'technology', 'Senior Engineer')";
result = statement.executeUpdate(sql);
if (result != 0) {
conn.commit();
System.out.println("写入表数据成功");
} else {
conn.rollback();
System.out.println("写入表数据失败");
}
/**
* 查询数据
*/
System.out.println("开始进行数据查询:");
sql = "SELECT * FROM PHOENIX_SCHEMA.EMPLOYEE";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
System.out.println("查询记录:" + resultSet.getInt("ID") + "\t" +
resultSet.getString("NAME") + "\t" +
resultSet.getShort("AGE") + "\t" +
resultSet.getBoolean("GENDER") + "\t" +
resultSet.getString("DEPARTMENT") + "\t" +
resultSet.getString("POST") + "\t"
);
}
/**
* 关闭结果集
*/
resultSet.close();
System.out.println("关闭查询结果集");
/**
* 关闭SQL语句对象、关闭连接
*/
statement.close();
conn.close();
System.out.println("关闭SQL语句对象");
System.out.println("关闭Phoenix连接");
}
}
下图为测试结果:

另外说明一下,Phoenix在创建表时支持的数据类型如下图所示:

至此,Phoenix-5.0.0 版本实验示例演示完毕。