29-hadoop-使用phtonenix工具&分页&数据导入
因为rowkey一般有业务逻辑, 所以不可以直接使用rowkey进行分页, startkey, endkey
想要使用SQL语句对Hbase进行查询,需要使用Apache的开源框架Phoenix。
安装
1, 下载phonenix
http://mirrors.cnnic.cn/apache/phoenix/
注意下载版本对应的phonenix
2, 解压
解压后, 将 phoenix-core-4.5.2-HBase-1.1.jar 拷贝至hbae各个节点的lib目录下
3, 重新启动hbae集群, 加载jar包
4, 启动,
到加压目录下执行命令
bin/sqlline.py 192.168.208.106:
操作
1, 查看所有表信息
!tables
2, 创建表
create table person (
id varchar primary key,
name varchar
);
3, 插入数据
upsert into person values
('', 'vini');
这儿的upsert, 相当于sql中的额 insert 和update 功能
4, 删除数据
delete from person
where
id = '';
5, 查询所有
select *
from person;
使用phonenix分页
hbase中, rowkey并非规则排布的, 并且可能包含业务逻辑, 所以分页不能像关系型数据库一样进行, 但使用phonenix可以新增列然后进行分页
1, 准备数据;
CREATE TABLE TMP_TRAVEL (ROWKEY VARCHAR PRIMARY KEY,INFO.SP VARCHAR,INFO.EP VARCHAR,INFO.ST VARCHAR,INFO.ET VARCHAR);
数据
UPSERT INTO TMP_TRAVEL VALUES('16357298756_20160201112343','北京','西三旗','');
UPSERT INTO TMP_TRAVEL VALUES('16357298756_20160202112343','北京','西三旗','');
UPSERT INTO TMP_TRAVEL VALUES('16357298756_20160203112343','北京','西三旗','');
UPSERT INTO TMP_TRAVEL VALUES('16357298756_20160204112343','北京','西三旗','');
UPSERT INTO TMP_TRAVEL VALUES('16357298756_20160205112343','北京','西三旗','');
UPSERT INTO TMP_TRAVEL VALUES('16357298756_20160206112343','北京','西三旗','');
UPSERT INTO TMP_TRAVEL VALUES('16357298756_20160207112343','北京','西三旗','');
UPSERT INTO TMP_TRAVEL VALUES('16357298756_20160208112343','北京','西三旗','');
UPSERT INTO TMP_TRAVEL VALUES('16357298756_20160209112343','北京','西三旗','');
UPSERT INTO TMP_TRAVEL VALUES('16357298756_20160210112343','北京','西三旗','');
2, 创建新表, 并增加 pageId
CREATE TABLE TRAVEL (ROWKEY VARCHAR PRIMARY KEY,INFO.SP VARCHAR,INFO.EP VARCHAR,INFO.ST VARCHAR,INFO.ET VARCHAR,PAGEID BIGINT);
3, 创建sequence作为pageId的值
CREATE SEQUENCE SEQ;
4, 将原数据拷贝到新表
UPSERT INTO TRAVEL SELECT ROWKEY,SP,EP,ST,ET,NEXT VALUE FOR SEQ FROM TMP_TRAVEL;
5, 使用 where pageId> ? and limit ? 进行分页
6, java代码
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper; import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List; /**
* Created by Administrator on 2016/3/3 0003.
*/
public class HbaseJdbc { private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Before
public void before(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
jdbcTemplate = (JdbcTemplate) context.getBean("phoenixJdbcTemplate");
}
@Test
public void test(){
List<com.sxt.hbase.Travel> pageRecords = findPageRecords(, , "", "", "");
for (Travel tt:pageRecords){
System.out.println(tt.getROWKEY());
}
} public List<Travel> findPageRecords(int currentPageNum, int pageSize, String ST, String SP, String EP) { //第一个参数为SQL语句,第二参数的RowMapper将每一行结果映射成一个Java对象,方便将其他封装到JavaBean中,第三个参数为占位符值(为可变参数)
List<Travel> travels = jdbcTemplate.query("SELECT * FROM TRAVEL where PAGEID > ? AND ST >= ? AND ROWKEY LIKE ? limit ?",
new RowMapper<Travel>() {
public Travel mapRow(ResultSet rs, int rowNum)
throws SQLException {
Travel travel = new Travel();
travel.setROWKEY(rs.getString("ROWKEY"));
travel.setSP(rs.getString("SP"));
travel.setEP(rs.getString("EP"));
travel.setST(rs.getString("ST"));
travel.setET(rs.getString("ET"));
return travel;
}
},(currentPageNum - )*pageSize,ST,SP+EP+"%",pageSize);
return travels;
}
}
分页工具
public class Travel {
private String ROWKEY;
private String SP;
private String EP;
private String ST;
private String ET;
public String getROWKEY() {
return ROWKEY;
}
public void setROWKEY(String ROWKEY) {
this.ROWKEY = ROWKEY;
}
public String getSP() {
return SP;
}
public void setSP(String SP) {
this.SP = SP;
}
public String getEP() {
return EP;
}
public void setEP(String EP) {
this.EP = EP;
}
public String getST() {
return ST;
}
public void setST(String ST) {
this.ST = ST;
}
public String getET() {
return ET;
}
public void setET(String ET) {
this.ET = ET;
}
}
数据导入
在上面的实例中, 进行数据导入使用的upsert语句, 非常繁琐, phonenix支持文件导入的方式
psql.py 192.168.208.106: ./WEB-STAT.sql ./WEB_STAT.csv
其中, .sql是建表语句, .csv是需要导入的数据
系列来自尚学堂视频
29-hadoop-使用phtonenix工具&分页&数据导入的更多相关文章
- Nebula Exchange 工具 Hive 数据导入的踩坑之旅
摘要:本文由社区用户 xrfinbj 贡献,主要介绍 Exchange 工具从 Hive 数仓导入数据到 Nebula Graph 的流程及相关的注意事项. 1 背景 公司内部有使用图数据库的场景,内 ...
- Sqoop -- 用于Hadoop与关系数据库间数据导入导出工作的工具
Sqoop是一款开源的工具,主要用于在Hadoop相关存储(HDFS.Hive.HBase)与传统关系数据库(MySql.Oracle等)间进行数据传递工作.Sqoop最早是作为Hadoop的一个第三 ...
- 从零自学Hadoop(16):Hive数据导入导出,集群数据迁移上
阅读目录 序 导入文件到Hive 将其他表的查询结果导入表 动态分区插入 将SQL语句的值插入到表中 模拟数据文件下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并 ...
- 使用sqoop工具从oracle导入数据
sqoop工具是hadoop下连接关系型数据库和Hadoop的桥梁,支持关系型数据库和hive.hdfs,hbase之间数据的相互导入,可以使用全表导入和增量导入 从RDBMS中抽取出的数据可以被Ma ...
- ImportTsv-HBase数据导入工具
一.概述 HBase官方提供了基于Mapreduce的批量数据导入工具:Bulk load和ImportTsv.关于Bulk load大家可以看下我另一篇博文. 通常HBase用户会使用HBase A ...
- sqoop工具从oracle导入数据2
sqoop工具从oracle导入数据 sqoop工具是hadoop下连接关系型数据库和Hadoop的桥梁,支持关系型数据库和hive.hdfs,hbase之间数据的相互导入,可以使用全表导入和增量导入 ...
- Hadoop Hive概念学习系列之HDFS、Hive、MySQL、Sqoop之间的数据导入导出(强烈建议去看)
Hive总结(七)Hive四种数据导入方式 (强烈建议去看) Hive几种数据导出方式 https://www.iteblog.com/archives/955 (强烈建议去看) 把MySQL里的数据 ...
- HBase数据导入导出工具
hbase中自带一些数据导入.导出工具 1. ImportTsv直接导入 1.1 hbase中建表 create 'testtable4','cf1','cf2' 1.2 准备数据文件data.txt ...
- 详解用Navicat工具将Excel中的数据导入Mysql中
第一步:首先需要准备好有数据的excel: 第二步:选择"文件"->"另存为",保存为"CSV(逗号分隔)(*.csv)",将exce ...
随机推荐
- Java输入输出技术
输入输出分类 输入流,相对计算机来说是输入的,例如鼠标键盘操作,设备给计算机的信息 输出流,相对计算机来说是输出的,例如屏幕显示,计算机给设备的信息. 具体分类 基本流,I ...
- 关于Linux学习中的问题和体会
本科期间未开展过与之相关的课程,所以初次接触Linux难免有些问题!参照老师给的学习资料中内容,逐步解决了一些问题,但还有一些问题没解决,下面列举出自己遇到的一些问题. 1.在环境变量与文件查找专题中 ...
- Beta阶段第五篇Scrum冲刺博客-Day4
1.站立式会议 提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 张晨晨:目标增加单词收藏功能 郭琪容:学习收藏功能的实 ...
- [ 9.10 ]CF每日一题系列—— 186A模拟处理字符串
Description: 跟你两个不相同的字符串,问你能否将第一个字符串任意两个字母交换一次使得两字符串相同,YES or NO Solution: 一维模拟就好了 #include <iost ...
- 100度享乐电商网 html
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
- 通过mybatis向数据库中插入日期数据
遇到的问题: 通过mybatis向数据库中插入日期格式数据,发现只有年月日, 没有小时分钟和秒 当你想在实体类中使用java.util.Date类型,而且还想在数据库中保存时分秒时, 解决办法: 你可 ...
- 微赞微擎V0.8以上版本:【数据库读写分离】实战教程 [复制链接]
http://www.efwww.com/forum.php?mod=viewthread&tid=4870 马上注册,下载更多源码,让你轻松玩转微信公众平台. 您需要 登录 才可以下载或查看 ...
- .NET Core1.1+VS2017RC+MySQL+EF搭建多层Web应用程序
先贴上解决方案截图 一.新建4个解决方案文件夹 1-Presentation 2-Application 3-Domain 4-Infrastructure 二.在解决方案文件夹中分别创建项目 其余项 ...
- NET 获取实例所表示的日期是星期几
获取日期枚举,可以根据switch去进行操作 DateTime.Now.DayOfWeek
- UWP 2018 新版 NavigationView 尝鲜
本文参考了官方文档以及提供的示例代码(官方代码貌似有点误导,所以写了这一篇,并且文末有GayHub代码地址) 官方文档发布于20180806,说明NavigationView刚发布了没几天,还在开发中 ...