1. 创建临时function (这里两个包都是hive自带的,不需要自己开发的,可以根据名称查找对应的版本)

  1. add jar /opt/local/hive/lib/hive-contrib-2.3..jar;
  2. add jar /opt/local/hive/lib/mysql-connector-java-5.1.-bin.jar;
  3.  
  4. CREATE TEMPORARY FUNCTION dboutput AS 'org.apache.hadoop.hive.contrib.genericudf.example.GenericUDFDBOutput';

2. dboutput使用方法

  1. select dboutput(jdbc数据库链接, 用户名, 密码, sql语句, hive字段值) from hive

准备一张hive表记录如下,然后在mysql中创建相同字段的表.

根据上面到规则,完整的hive脚本如下, 保存到script.q文件中:

  1. --定义临时function,用于导出到mysql
  2. add jar /opt/local/hive/lib/hive-contrib-2.3..jar;
  3. add jar /opt/local/hive/lib/mysql-connector-java-5.1.-bin.jar;
  4. CREATE TEMPORARY FUNCTION dboutput AS 'org.apache.hadoop.hive.contrib.genericudf.example.GenericUDFDBOutput';
  5.  
  6. --查询hive并将结果写入mysql
  7. select dboutput('${url}','${username}','${password}',
  8. 'INSERT INTO dm_index_pv_uv
  9. (dt,tenantcode,deviceid,bourse_week,week_begin,week_end, yrmm, month_begin, month_end)
  10. VALUES(?,?,?,?,?,?,?,?,?)',
  11. dt,tenantcode,deviceid,bourse_week,week_begin,week_end, yrmm, month_begin, month_end
  12. )from dw_stg.tmp_1 where dt=${dt};

这里只能insert into记录,无法删除。下面这种写法是错误的

  1. select dboutput('${url}','${username}','${password}',
  2. 'delete from dm_index_pv_uv where dt=${dt};##这行错误!!
  3. INSERT INTO dm_index_pv_uv
  4. (dt,tenantcode,deviceid,bourse_week,week_begin,week_end, yrmm, month_begin, month_end)
  5. VALUES(?,?,?,?,?,?,?,?,?)',
  6. dt,tenantcode,deviceid,bourse_week,week_begin,week_end, yrmm, month_begin, month_end
  7. )from dw_stg.tmp_1 where dt=${dt};

使用hive -f脚本执行。

  1. #!/bin/sh
  2. echo 'app2mysql'
  3.  
  4. hive -f script.q \
  5. -hivevar dt= \
  6. -hivevar url=jdbc:mysql://dwdev-name2/bigdata \
  7. -hivevar username=mysql \
  8. -hivevar password=123456

执行过程如下:

查看mysql 中记录:

一般数据量不大的情况下,可以直接使用,还是比较方便的。省去了使用sqoop或者自己开发的麻烦。

创建function实现hive表结果导出到mysql的更多相关文章

  1. 从hive将数据导出到mysql(转)

    从hive将数据导出到mysql http://abloz.com 2012.7.20 author:周海汉 在上一篇文章<用sqoop进行mysql和hdfs系统间的数据互导>中,提到s ...

  2. hive表数据导出到csv乱码原因及解决方案

    转载自http://blog.csdn.net/lgdlxc/article/details/42126225 Hive表中的数据使用hive - e"select * from table ...

  3. 根据JSON创建对应的HIVE表

    本文提供一种用SCALA把JSON串转换为HIVE表的方法,由于比较简单,只贴代码,不做解释.有问题可以留言探讨 package com.gabry.hiveimport org.json4s._im ...

  4. hive表增量抽取到mysql(关系数据库)的通用程序(三)

    hive表增量抽取到oracle数据库的通用程序(一) hive表增量抽取到oracle数据库的通用程序(二) 这几天又用到了该功能了,所以又改进了一版,增加了全量抽取和批量抽取两个参数.并且可以设置 ...

  5. Hive表数据导出

    方式一: hadoop命令导出 hadoop fs -get hdfs://hadoop000:8020/data/page_views2 pv2  方式二:通过insert...directory导 ...

  6. 将Hive统计分析结果导入到MySQL数据库表中(一)——Sqoop导入方式

    https://blog.csdn.net/niityzu/article/details/45190787 交通流的数据分析,需求是对于海量的城市交通数据,需要使用MapReduce清洗后导入到HB ...

  7. 利用sqoop将hive数据导入导出数据到mysql

    一.导入导出数据库常用命令语句 1)列出mysql数据库中的所有数据库命令  #  sqoop list-databases --connect jdbc:mysql://localhost:3306 ...

  8. 使用 sqoop 将mysql数据导入到hive表(import)

    Sqoop将mysql数据导入到hive表中 先在mysql创建表 CREATE TABLE `sqoop_test` ( `id` ) DEFAULT NULL, `name` varchar() ...

  9. flume的sink写入hive表

    flume的配置文件如下: a1.sources=r1 a1.channels=c1 a1.sinks=s1 a1.sources.r1.type=netcat a1.sources.r1.bind= ...

随机推荐

  1. 转 部署Zipkin分布式性能追踪日志系统的操作记录

    2017年02月27日 11:01:29 https://blog.csdn.net/konglongaa/article/details/58016398 阅读数:7631 Zipkin是Twitt ...

  2. Android Studio中如何设置颜色拾色器工具

    Android Studio如何设置颜色拾色器工具Color Picker? 你可能下载过一些获取颜色值的一些小工具, 这种方式获取颜色,需要先切换窗口转跳到桌面,然后打开拾色器小工具程序,然后去拾取 ...

  3. vim的全局替换[zz]&把字符替换成回车

    本文出自   http://blog.csdn.net/shuangde800   本文是在学习<使用vi编辑器, Lamb & Robbins编著>时在所记的笔记.   本文内容 ...

  4. 分布式系统的那些事儿(四) - MQ时代的通信

    之前在讲RPC通信的各种好处,特别好用,但是RPC并不是万能的,也并不是适用于各种场景的,因为他是同步的:现如今很多场景下的调用都是异步的,系统A调用B后,并不需要知道B的结果,而且对B的结果无所谓, ...

  5. [svc]java初步

    J2EE.J2SE 和 J2ME 三者的区别有哪些? J2SE, 主要是桌面软件开发,包括swing 等.是后面2个的基础,但是我们不用它做桌面开发.只学习语法. J2EE,网站开发,servlet. ...

  6. jQuery函数继承 $.extend, $.fn.extend

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 【Unity】9.3 粒子系统生成器详解

    分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 上一节已经介绍过了在Unity 5.x中两种创建粒子效果的方式(方式1.方式2). 这一节我们主要学习第2种方式的基本概 ...

  8. rpmverify命令用来验证已安装的rpm软件包的正确性

    -Va:验证所有软件包: 来自: http://man.linuxde.net/rpmverify -Va:验证所有软件包: [root@DB ~]# rpmverify -Va ....L.... ...

  9. 转:Android文件存储路径getFilesDir()与getExternalFilesDir的区别

    作为一个开发者,我们经常需要通过缓存一些文件到SD卡中,常见的方式就是,通过: File sdCard = Environment.getExternalStorageDirectory(); 获取S ...

  10. 【Socket】linux套接字技术之tcp

      1.mystery引入      1)UDP也可以编写出C/S程序 ,另外TCP也可以编写点对点通信.    2)网络的本质就是资源共享,当前流行的P2P应用正好暗合了这种精神.    3)当前流 ...