热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hive2mysql_架构hive2mysql流程

1、分析参数argsnewString[5];args[0]d:3-20.sql;args[1]-date;args[2]2013-01-01;args[3]-dat

1、分析参数

args = new String[5];

args[0]="d:/3-20.sql";

args[1]="-date";

args[2]="2013-01-01";

args[3]="-date1";

args[4]="2013-11-11";

讲参数分析后键值对成对放入map中()如果第一个参数包含‘-’作为键,下一个就是作为value

package com.hiveF;

import java.util.HashMap;

import java.util.Map;

public class ParseArgs {

private Map map = null;

public ParseArgs(String[] args) {

map = new HashMap() ;

if (args.length == 0) {

return ;

}

int i = 0;

while(i

String par = args[i].trim();

if (par.startsWith("-")) {

String key = par.substring(1).trim();

i ++ ;

String value = null;

if (args.length>i) {

value = args[i].trim();

if (value.startsWith("\"") || value.startsWith("\'")) {

value = value.substring(1,value.length() - 1).trim();

}

}

map.put(key, value);

i ++ ;

}else {

i ++ ;

}

}

}

public Map getMap() {

return map;

}

}

2、拿到sql语句

public static String getSql(File file) throws Exception{

BufferedReader bf = new BufferedReader(new FileReader(file)) ;

StringBuffer sqlBuffer = new StringBuffer();

String temp = null;

while((temp=bf.readLine())!=null){

String tmp = temp.trim();

if (tmp.length()==0 || tmp.startsWith("#") || tmp.startsWith("--")) {

continue ;

}

sqlBuffer.append(tmp+ " ") ;

}

bf.close();

return sqlBuffer.toString();

}

3、将分析的参数带入sql中

public static final String BEGIN="{$" ;

public static final String END="}" ;

public static String parse(String sql, Map map)

{

int begin = sql.indexOf(BEGIN) ;

while(begin != -1)

{

String suffix = sql.substring(begin + BEGIN.length());

int end = begin + BEGIN.length() + suffix.indexOf(END) ;

String key = sql.substring(begin+BEGIN.length(), end).trim() ;

if (map != null && map.get(key) != null) {

sql = sql.substring(0, begin) + map.get(key) + sql.substring(end + 1, sql.length()) ;

}

else

{

throw new RuntimeException("Invalid Expression.....");

}

begin = sql.indexOf(BEGIN) ;

}

return sql ;

}

HiveF文件 (执行jar文件拿到拼接好的java语句,【hive -e可以在shell中执行sql,并且此文件配置到linux的环境变量下】)

c3fce4fec26b555f9c84eb1906545594.png

hiveF ./rpt_sale_daily.hql -date $date

7aaf66be1022145ad1d73a85c3e78c9f.png

执行hive作业得到结果

hive2mysql

上面得到hive的结果,对配置文件进行分析删除存在的表,然后把结果从hive抽取到mysql中

hive2mysql ./aa.property -date $date

f3f13c6c64eeeb1816e8f2e73616c6c5.png

hive2mysql代码(用于拼接执行删除对应日期存在的表,和查询hive分析出来的数据插入到mysql中)

package com.cloudy.tools;

import java.io.FileInputStream;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.Statement;

import java.util.Properties;

import org.apache.hadoop.metrics.spi.Util;

import com.ibeifeng.hiveF.ParseArgs;

import com.ibeifeng.hiveF.Utils;

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("pls set propertyName!");

//System.exit(1);

//}

args &#61; new String[3];

args[0]&#61;"d:/aa.property";

args[1]&#61;"-date";

args[2]&#61;"2015-01-01";

String propertyName &#61; args[0];

ParseArgs parse &#61; new ParseArgs(args);

Hive2Mysql h2m &#61; new Hive2Mysql(propertyName);

System.out.println(h2m.prop.get("Hive_sql"));

System.out.println(h2m.prop.get("Mysql_table"));

String hive_sql &#61; h2m.prop.get("Hive_sql").toString();

hive_sql &#61; Utils.parse(hive_sql, parse.getMap());

//System.out.println("hive_sql" &#43; hive_sql);

String mysql_table &#61; h2m.prop.get("Mysql_table").toString();

String mysql_columns &#61; h2m.prop.get("mysql_columns").toString();

String mysql_delete &#61; h2m.prop.get("mysql_delete").toString();

mysql_delete &#61; Utils.parse(mysql_delete, parse.getMap());

// insert into mysql_table(pv,uv.huodong) values(123,234,"huodong");

String mysql_sql&#61;"insert into " &#43; mysql_table &#43; " (" &#43; mysql_columns&#43;") values(";

System.out.println("mysqldelete:" &#43; mysql_delete);

Connection mysqlCon &#61; MyConnection.getMySqlInstance();

Connection myHiveCon &#61; MyConnection.getHiveInstance();

//进行hive查询

Statement stHive &#61; myHiveCon.createStatement();

Statement stMsql &#61; mysqlCon.createStatement();

stMsql.execute(mysql_delete);

ResultSet rsHive &#61; stHive.executeQuery(hive_sql);

int len &#61; hive_sql.split("from")[0].split("select")[1].trim().split(",").length;

System.out.println(len);

String value &#61; "";

while(rsHive.next())

{

for(int i &#61;1;i<&#61;len;i&#43;&#43;)

{

value &#43;&#61; "&#39;" &#43; rsHive.getString(i) &#43; "&#39;,";

}

value &#61; value.substring(0,value.length()-1);

mysql_sql &#61; mysql_sql &#43; value &#43; ")";

//System.out.println(value);

System.out.println(mysql_sql);

stMsql.execute(mysql_sql);

value &#61;"";

mysql_sql&#61;"insert into " &#43; mysql_table &#43; " (" &#43; mysql_columns&#43;") values(";

}

//insert into mysql_table() values(123,234,"huodong")

} catch (Exception e) {

e.printStackTrace();

}

}

}



推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
author-avatar
禅茶一味2502922807_527
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有