Phoenix是一个开源的HBASE SQL层。Phoeinx可以用标准的JDBC API替代HBASE client API来创建表,插入和查询HBASE中的数据。

Phoenix作为应用层和HBASE之间的中间件,以下特性使它在大数据量的简单查询场景有着独有的优势

  • 二级索引支持(global index + local index)
  • 编译SQL成为原生HBASE的可并行执行的scan
  • 在数据层完成计算,server端的coprocessor执行聚合
  • 下推where过滤条件到server端的scan filter上
  • 利用统计信息优化、选择查询计划(5.x版本将支持CBO)
  • skip scan功能提高扫描速度

一般可以使用以下三种方式访问Phoenix

  1. JDBC API
  2. 使用Python编写的命令行工具(sqlline, sqlline-thin和psql等)
  3. SQuirrel

一、命令行工具psql使用示例

1.创建一个建表的sql脚本文件us_population.sql:
CREATE TABLE IF NOT EXISTS us_population (
state CHAR(2) NOT NULL,
city VARCHAR NOT NULL,
population BIGINT
CONSTRAINT my_pk PRIMARY KEY (state, city));
2. 创建csv格式的数据文件us_population.csv:
NY,New York,8143197
CA,Los Angeles,3844829
IL,Chicago,2842518
TX,Houston,2016582
PA,Philadelphia,1463281
AZ,Phoenix,1461575
TX,San Antonio,1256509
CA,San Diego,1255540
TX,Dallas,1213825
CA,San Jose,912332
3. 创建一个查询sql脚本文件us_population_queries.sql
SELECT state as "State",count(city) as "City Count",sum(population) as "Population Sum"
FROM us_population
GROUP BY state
ORDER BY sum(population) DESC;
4. 执行psql.py工具运行sql脚本
./psql.py <your_zookeeper_quorum> us_population.sql us_population.csv us_population_queries.sql

二、JDBC API使用示例

1. 使用Maven构建工程时,需要添加以下依赖
<dependencies>
<dependency>
<groupId>com.aliyun.phoenix</groupId>
<artifactId>ali-phoenix-core</artifactId>
<version>${version}</version>
</dependency>
</dependencies>
2. 创建名为test.java的文件
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.Statement; public class test { public static void main(String[] args) throws SQLException {
Statement stmt = null;
ResultSet rset = null; Connection con = DriverManager.getConnection("jdbc:phoenix:[zookeeper]");
stmt = con.createStatement(); stmt.executeUpdate("create table test (mykey integer not null primary key, mycolumn varchar)");
stmt.executeUpdate("upsert into test values (1,'Hello')");
stmt.executeUpdate("upsert into test values (2,'World!')");
con.commit(); PreparedStatement statement = con.prepareStatement("select * from test");
rset = statement.executeQuery();
while (rset.next()) {
System.out.println(rset.getString("mycolumn"));
}
statement.close();
con.close();
}
}
3.执行test.java
javac test.java

java -cp "../phoenix-[version]-client.jar:." test

三、SQuirrel使用示例

参考这里

转载: https://yq.aliyun.com/articles/253038


资料

HBase:https://pan.baidu.com/s/1jILzgns

知乎HBase讨论:https://www.zhihu.com/topic/19600820/hot

hbase-help:http://hbase-help.com/

CSDN HBase资料库:http://lib.csdn.net/hbase/node/734

这些资料是笔者整理,以供有大规模结构化需求的用户及HBase爱好者学习交流,以使用HBase更好的解决实际的问题。

交流

如果大家对HBase有兴趣,致力于使用HBase解决实际的问题,欢迎加入Hbase技术社区群交流:

微信HBase技术社区群,假如微信群加不了,可以加秘书微信: SH_425 ,然后邀请您。

​  钉钉HBase技术社区群

最新文章

  1. python curses使用
  2. Python OpenCV —— geometric
  3. UDP信息接收与发送
  4. php学习笔记4--php中的变量作用域
  5. Java中构造方法的执行顺序
  6. arcgis api for silverlight使用google map等多个在线地图
  7. Django学习之manage.py使用
  8. python顶级执行代码
  9. oracle11g的内存分配不当,导致的错误ORA-01034,ORA-00838,ORA-27101
  10. 广度优先搜索(BFS)——迷宫的最短路径
  11. Python + PyQt5 实现美剧爬虫可视工具(二)
  12. EF CodeFirst系列(6)---配置1对1,1对多,多对多关系
  13. JavaScript:我总结的数组API
  14. My google script which based on Google Sheet and Form
  15. attr VS prop 区别
  16. linux之 redis 的rdb 转 aof 及主从复
  17. Word打开时显示*模板*,删除模板
  18. 20155218 Exp1 PC平台逆向破解(5)M
  19. git merge branch to master
  20. Windows Phone 7 程序等待页面的处理

热门文章

  1. 【HDOJ5971】Wrestling Match(二分图,并查集)
  2. 百度图表echars插件使用案例
  3. 这是一份很有诚意的2017 Google I/O大会的汇总 &amp; 解析
  4. LeetCode OJ--Regular Expression Matching
  5. AC日记——总分 Score Inflation 洛谷 P2722
  6. datetimepicker[jquery-ui]时间控件的三种初始化方法
  7. GRDB使用SQLite的WAL模式
  8. UVALive 5135 Mining Your Own Business 双连通分量
  9. CodeForces - 618F Double Knapsack
  10. Java---详解方法传值问题