Hive学习之六 《Hive进阶— —hive jdbc》 详解
接Hive学习五
http://www.cnblogs.com/invban/p/5331159.html
一、配置环境变量
hive jdbc的开发,在开发环境中,配置Java环境变量
修改/etc/profile
vi /etc/profile
PATH=$PATH:/usr/java/jdk1..0_31/bin:/opt/litong/bin
source /etc/profile 立即起效
二、配置文件开发
Hive_sql=select ds,hour,huodong,pv,uv from rpt.rpt_sale_daily where ds='{$date}' and hour='{$hour}' limit 20
Mysql_table=rpt_sale_daily
mysql_columns=id,hours,huodong,pvv,uvv
mysql_delete=delete from rpt_sale_daily where id='{$date}'
三、创建项目实现hive的jdbc接口
①配置Connection的Java文件。
import java.sql.Connection;
import java.sql.DriverManager;
public class MyConnection {
public static Connection getMysqlInstance() throws Exception
{ Class.forName("com.mysql.jdbc.Driver") ;
Connection con =
DriverManager.getConnection("jdbc:mysql://192.168.0.115:3306/test","root","123456");
return con;
}
public static Connection getHiveInstance() throws Exception{ Class.forName("org.apache.hive.jdbc.HiveDriver") ;
Connection con =
DriverManager.getConnection("jdbc:hive2://192.168.0.115:10000/default", "root", "");
return con;
}
}
②开发Hive2Mysql的Java文件
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Connection;
import java.util.Properties; public class Hive2Mysql { public Hive2Mysql(String propertyName) throws Exception{
init(propertyName);
} Properties prop = new Properties();
public void init(String propertyName) throws Exception{
InputStream stream = new FileInputStream(propertyName);
prop.load(stream);
} public static void main(String[] args) {
try {
if(args.length<1){
System.out.println("please set propertyName");
System.exit(1);
}
String propertyName = args[0];
Hive2Mysql h2m = new Hive2Mysql(propertyName);
String hive_sql = h2m.prop.get("Hive_sql").toString();
String mysql_table = h2m.prop.get("Mysql_table").toString();
String mysql_columns = h2m.prop.getProperty("mysql_columns").toString();
String mysql_delete = h2m.prop.getProperty("mysql_delete").toString();
//insert into
String mysql_sql = "insert into "+mysql_table+" ("+mysql_columns+") values(" ; Connection mysqlCon = MyConnection.getMysqlInstance();
Connection myHiveCon = MyConnection.getHiveInstance(); //进行hive查询
Statement stHive = myHiveCon.createStatement();
ResultSet rsHive = stHive.executeQuery(hive_sql); Statement stMysql = mysqlCon.createStatement();
//删除mysql里此次insert的数据
stMysql.execute(mysql_delete); int len = hive_sql.split("from")[0].split("select")[1].trim().split(",").length ;
System.out.println(len);
String value = "";
while(rsHive.next()){
for(int i=1;i<=len;i++){
value += "'"+rsHive.getString(i)+"',";
}
//去掉最后一个逗号
value = value.substring(0, value.length()-1);
mysql_sql = mysql_sql+value+")";
stMysql.execute(mysql_sql);
System.out.println(mysql_sql);
//重置value
value = "";
mysql_sql = "insert into "+mysql_table+" ("+mysql_columns+") values(" ;
}
//关闭连接
rsHive.close();
stHive.close();
stMysql.close();
mysqlCon.close();
myHiveCon.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
③在mysql中,创建表rpt_sale_daily

④将Java项目打包成jar文件,并上传配置文件aa.property
将jar文件传到/opt/litong/lib/下
配置文件放在/opt/litong/lib/property/rpt_sale_daily下
⑤编写hql文件代码,在/opt/litong/lib/property/rpt_sale_daily目录下创建rpt_sale_daily.hql
add jar /opt/litong/lib/hiveUDF.jar
create temporary function GetCommentNameOrId as 'com.litong.hive.udf.GetCommentNameOrId'; insert overwrite table rpt.rpt_sale_daily partition (ds='2015-08-28',hour='')
select GetCommentNameOrId(url,"sale") huodong,count(url) pv,count(distinct guid) uv from default.track_log a
where ds='2015-08-28' and hour=''
group by ds,GetCommentNameOrId(url,"sale"); insert overwrite table rpt.rpt_sale_daily partition (ds='2015-08-28',hour='')
select GetCommentNameOrId(url,"sale") huodong,count(url) pv,count(distinct guid) uv from default.track_log a
where ds='2015-08-28' and hour=''
group by ds,GetCommentNameOrId(url,"sale");
⑥将jar封装成命令hive2mysql。
在opt/litong/bin中,vi hive2mysql
java -jar /opt/litong/lib/hive2mysql.jar $*
注释$*:传的参数
⑦编写shell脚本,在/opt/litong/lib/property/rpt_sale_daily目录下创建rpt_sale_daily.sh
#!/bin/sh
hive -f rpt_sale_daily.hql
hive2mysql /opt/litong/lib/property/rpt_sale_daily/aa.property
总结:
以后在执行过程中,配置三个文件即可,分别是:
aa.property, rpt_sale_daily.hql, rpt_sale_daily.sh
⑧执行shell脚本文件,rpt_sale_daily.sh
得到的结果为:

Hive学习之六 《Hive进阶— —hive jdbc》 详解的更多相关文章
- Spring4 JDBC详解
Spring4 JDBC详解 在之前的Spring4 IOC详解 的文章中,并没有介绍使用外部属性的知识点.现在利用配置c3p0连接池的契机来一起学习.本章内容主要有两个部分:配置c3p0(重点)和 ...
- JDBC详解(一)
一.相关概念介绍 1.1.数据库驱动 这里驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡,同样道理 ...
- JDBC详解1
JDBC详解1 JDBC整体思维导图 JDBC入门 导jar包:驱动! 加载驱动类:Class.forName("类名"); 给出url.username.password,其中u ...
- JavaScript进阶内容——DOM详解
JavaScript进阶内容--DOM详解 当我们已经熟练掌握JavaScript的语法之后,我们就该进入更深层次的学习了 首先我们思考一下:JavaScript是用来做什么的? JavaScript ...
- JavaScript进阶内容——BOM详解
JavaScript进阶内容--BOM详解 在上一篇文章中我们学习了DOM,接下来让我们先通过和DOM的对比来简单了解一下BOM 首先我们先来复习一下DOM: 文档对象模型 DOM把文档当作一个对象来 ...
- ASP.NET MVC 5 学习教程:生成的代码详解
原文 ASP.NET MVC 5 学习教程:生成的代码详解 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 ...
- JDBC详解系列(二)之加载驱动
---[来自我的CSDN博客](http://blog.csdn.net/weixin_37139197/article/details/78838091)--- 在JDBC详解系列(一)之流程中 ...
- JDBC详解系列(三)之建立连接(DriverManager.getConnection)
在JDBC详解系列(一)之流程中,我将数据库的连接分解成了六个步骤. JDBC流程: 第一步:加载Driver类,注册数据库驱动: 第二步:通过DriverManager,使用url,用户名和密码 ...
- IP地址和子网划分学习笔记之《IP地址详解》
2018-05-03 18:47:37 在学习IP地址和子网划分前,必须对进制计数有一定了解,尤其是二进制和十进制之间的相互转换,对于我们掌握IP地址和子网的划分非常有帮助,可参看如下目录详文. ...
- OpenCV学习C++接口 Mat像素遍历详解
OpenCV学习C++接口 Mat像素遍历详解
随机推荐
- win平台下, 检测网络是否连接最好的办法
[Delphi]检查URL是否有效的函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 function CheckUr ...
- 【号外号外:微软收购 .NET 的开源实现 Xamarin 项目的公司】
[首页小编:你好,关于博客园对Xamarin的报道确实一笔而过了,希望能不要把这篇文章移除首页呵呵,祝福帅气,聪明,敏捷,睿智的小编] 一个月后,微软开始免费Xamarin了....还要放开SDK.. ...
- 「Poetize5」GF弹钢琴
描述 Description 现在PianoEater有一架有52个白键和 36个黑键的钢琴,并且他要弹奏的曲子只需要按白键.在同一时刻,他只用弹奏一个音符.如果这个音符不移动大拇指就可以按到,那么他 ...
- 字符串(LCT,后缀自动机):BZOJ 2555 SubString
2555: SubString Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 1620 Solved: 471 Description 懒得写背景了 ...
- sql server 查询日期中的常用语句, 例如本周第一天, 年内的第几周,有用
--本周第一天 SELECT DATEADD(Day,1-(DATEPART(Weekday,getdate())+@@DATEFIRST-1)%7,getdate()) --or s ...
- C语言赋值运算符
赋值运算符: 分类: 简单赋值 int a ; a=10; 复合运算符 int a ; a+=4; 复合位运算符 int a; a&=1:
- Hat's Fibonacci(大数问题)
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int a[ ...
- Android中 判断是平板还是手机
//是平板返回true 不是平板返回false public boolean isTablet(Context context) { return (context.getResources().g ...
- python通过SMTP发送邮件失败,报错505/535
python通过SMTP发送邮件失败:错误1:smtplib.SMTPAuthenticationError: (550, b'User has no permission') 我们使用pyth ...
- [分享]WPF 虚拟键盘
场景:用WPF做触屏的软件难免会需要用户输入的问题,至少是简单的数字,这个时候就免不了需要键盘输入. 思路:既然是虚拟键盘,那么我的目的就是模拟键盘输入即可. 1.模拟键盘输入 模拟键盘输入?那么肯定 ...