接Hive学习五

http://www.cnblogs.com/invban/p/5331159.html

一、配置环境变量

  hive jdbc的开发,在开发环境中,配置Java环境变量

修改/etc/profile
vi /etc/profile
PATH=$PATH:/usr/java/jdk1.6.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);//重置valuevalue = "";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='18')
select GetCommentNameOrId(url,"sale") huodong,count(url) pv,count(distinct guid) uv from default.track_log a
where ds='2015-08-28' and hour='18'
group by ds,GetCommentNameOrId(url,"sale");insert overwrite table rpt.rpt_sale_daily partition (ds='2015-08-28',hour='19')
select GetCommentNameOrId(url,"sale") huodong,count(url) pv,count(distinct guid) uv from default.track_log a
where ds='2015-08-28' and hour='19'
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

    得到的结果为:

  

  

  

  

转载于:https://www.cnblogs.com/invban/p/5333302.html

Hive学习之六 《Hive进阶— —hive jdbc》 详解相关推荐

  1. Hive学习之路(二):Hive表操作详讲

    操作内容简介 一.操作前的准备 二.Hive表操作详讲 1. 创建数据库 2. 查看所有数据库/表 3. 在Hive上直接操作HDFS 4. 在Hive上直接执行终端命令 5. 创建数据表/查看表的信 ...

  2. JDBC学习笔记02【ResultSet类详解、JDBC登录案例练习、PreparedStatement类详解】

    黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...

  3. python 拼音库_python有没有拼音库python进阶之socket详解

    Socket的英文原义是"孔"或"插座".作为BSD UNIX的进程通信机制,通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句 ...

  4. 攻防世界web进阶区Web_python_block_chain详解

    攻防世界web进阶区Web_python_block_chain详解 题目 详解 51% 双花攻击 题目 详解 我们整理一下 Announcement: The server has been res ...

  5. Spring JDBC详解

    <Spring JDBC详解> 本文旨在讲述Spring JDBC模块的用法.Spring JDBC模块是Spring框架的基础模块之一. 一.概述 在Spring JDBC模块中,所有的 ...

  6. JavaScript学习总结(四)——逻辑OR运算符详解

    转载自   JavaScript学习总结(四)--逻辑OR运算符详解 在JavaScript中,逻辑OR运算符用||表示 var bTrue = true;var bFalse = false;var ...

  7. Keras深度学习实战(4)——深度学习中常用激活函数和损失函数详解

    Keras深度学习实战(4)--深度学习中常用激活函数和损失函数详解 常用激活函数 Sigmoid 激活函数 Tanh 激活函数 ReLU 激活函数 线性激活函数 Softmax 激活函数 损失函数 ...

  8. 小猫爪:i.MX RT1050学习笔记26-RT1xxx系列的FlexCAN详解

    i.MX RT1050学习笔记26-RT1xxx系列的FlexCAN详解 1 前言 2 FlexCAN简介 2.1 MB(邮箱)系统 2.1.1 正常模式下 2.1.2 激活了CAN FD情况下 2. ...

  9. 【原创-更新完毕】|日历拼图游戏的解决方案(C语言-进阶应用)-详解连载2

    [原创]|日历拼图游戏的解决方案(C语言-进阶应用)-详解连载1_zhuyi8120的博客-CSDN博客 [原创]|日历拼图游戏的解决方案(C语言-进阶应用)-详解连载3_zhuyi8120的博客-C ...

  10. 攻防世界web进阶区Web_php_wrong_nginx_config详解

    攻防世界web进阶区Web_php_wrong_nginx_config详解 题目 详解 题目 打开发现无论我们输入什么他都会弹出网站建设不完全 那么我们使用御剑进行扫描,扫描到了admin和robo ...

最新文章

  1. Mysql5.7-CentOS7安装
  2. 百度腾讯齐刷刷强调“产业+AI”,李彦宏看深,马化腾见远
  3. python读取txt为dataframe_python批量读取txt文件为DataFrame的方法
  4. nn.BCELoss与nn.CrossEntropyLoss的区别
  5. 《信息检索》第8讲 毕业论文学习指导(资源及预习材料)
  6. MFC——ComBox用法大全
  7. 【Hitachi2020C】ThREE【构造】【二分图染色】
  8. 庆功会(信息学奥数一本通-T1269)
  9. 分布式面试 - 为什么要进行系统拆分?
  10. Apache Commons介绍(转载)
  11. plc维修入门与故障处理实例_13个浮筒液位计维修实例助你快速解决现场故障问题...
  12. grid studio python_Grid studio表格应用程序:Python的集大成者
  13. mfc 二进制转换成图像_图像相似度---感知哈希算法(phash)---用matlab实现
  14. 从零开始学习编程,会很难学吗?新手想快速掌握应该怎么学?
  15. python直方图均衡_python 简单图像处理(8) 直方图均衡化
  16. mac android 手机连接打印机,为什么苹果电脑连接打印机打不出来怎么办
  17. java中文姓名排序_java中文排序
  18. html5基础了解---前端结构
  19. Airdrop式社交:富友,你的airdrop没关
  20. 本人常用软件(工具)

热门文章

  1. Blob(二进制)、byte[]、long、date之间的类型转换
  2. MyBatis单表增删改查--接口实现
  3. 很牛的vim使用技巧nbsp;转载来的
  4. 自定义admin组件,Xamin
  5. 51Nod 1131 - 覆盖数字的数量(分类讨论)
  6. 1030: [JSOI2007]文本生成器
  7. Trusted Execution Technology (TXT) --- 基本原理篇
  8. jmeter正则表达式提取器使用
  9. 配置springMVC时出现的问题
  10. windows2008 网络相关