编写Hive的UDF(查询平台数据同时向mysql添加数据)
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6812629187518530052/
可能会有一些截图中会有错误提示,是因为本地的包一直包下载有问题,截完图已经下载好了。
创建包结构
创建一个基础信息类
所有输出到mysql数据库中的自定义MR任务的自定义key均需要实现该抽象类
代码内容,主要是实现org.apache.hadoop.io.WritableComparable类,其它不需要写
创建平台信息类
创建全局配置常数类
后面慢慢添加内容
继续完成PlatformInfoKey,添加构造函数
常数类添加信息
根据给定的参数值,构建多个不同维度的平台维度对象
完成参数验证
然后构建平台信息
添加write和readFields方法
创建compareTo方法
添加get/set、hashCode、toString、equals方法,自动生成就可以
创建信息业务接口和实现类
完成接口
添加实现类
创建一个jdbc的管理器
常数类添加数据库配置
JdbcManager添加jdbc连接
关闭数据库连接
继续完成BaseInfoConverterImpl,添加默认构造函数
添加一个缓存数据类型
继续完成BaseInfoConverterImpl,添加方法创建cache key
创建获取ID的方法
继续编写
添加下面的代码
补全里面的sql语句
添加两个参数
完成getConnection()
完成executeSql
设置参数
添加关闭方法
创建一个UDF,模拟数据库平台数据记录
添加内容
添加evaluate方法
创建一个测试类
创建数据库
create database report
DROP TABLE IF EXISTS `platform`;
CREATE TABLE `platform` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`platform_name` varchar(45) DEFAULT NULL COMMENT '平台名称',
`platform_version` varchar(10) DEFAULT NULL COMMENT '平台版本',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='平台信息表';
Sql语句
String querySql = "SELECT `id` FROM `platform` WHERE `platform_name` = ? AND `platform_version` = ? order by `id`";
String insertSql = "INSERT INTO `platform`(`platform_name`, `platform_version`) VALUES(?, ?)";
修改配置:
连接本地数据库
运行结果
数据库中
本地测试成功开始打包项目放进集群进行测试
把打包好的jar包改名为hive_udf3.jar放到集群里
进入MySQL中创建report数据库
create database report;
创建表platform
进入hive
把jar包添加到hive当中
可以用list jar 和 delete jar 分别显示jar和删除jar
创建临时函数
create temporary function convert_bl as 'com.xlgl.wzy.hive.udf.PlatformConverterUDF';
我们可以用show_functions查看函数
我们查看已有表的数据
select ename,convert_bl(ename,0) lower_name from emp;
这里报了一个异常
这个问题可能是出在maven给的版本和hive的版本不一样导致可以替换成自己的版本
然后重新打成jar包运行一下
再查询一下
select ename,convert_bl(ename,0) lower_name from emp;
可以在mysql中查看数据
编写Hive的UDF(查询平台数据同时向mysql添加数据)的更多相关文章
- mybatis+oracle添加一条数据并返回所添加数据的主键问题
最近做mybatis+oracle项目的时候解决添加一条数据并返回所添加数据的主键问题 controller层 @RequestMapping("/addplan") public ...
- 解决在mysql表中删除自增id数据后,再添加数据时,id不会自增1的问题
https://blog.csdn.net/shaojunbo24/article/details/50036859 问题:mysql表中删除自增id数据后,再添加数据时,id不会紧接.比如:自增id ...
- Android之ListView动态添加数据(SQLiteOpenHelper类添加数据)
一.SQLiteOpenHelper类: 这次我们通过sqlite来动态添加数据,接下来我们创建一个openHelper.java,在前面sqlite博客中我们已经详细的讲了SQLite的创建及使用等 ...
- myecilpse +TOMCAT+web:jsp向mysql添加数据,查询在jsp页面显示
<%@ page language="java" import="java.util.*" import="com.mysql.jdbc.Dri ...
- mysql 添加数据如果数据存在就更新ON DUPLICATE KEY UPDATE和REPLACE INTO
#下面建立game表,设置name值为唯一索引. CREATE TABLE `game` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar( ...
- 用PHP向mysql添加数据
<?php $name=$_POST['name']; $gender = $_POST['gender']; $age=$_POST['age']; #连接到数据库 $link = mysql ...
- 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟
使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 Sqoop 大数据 Hive HBase ETL 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 基础环境 ...
- 教程 | 使用Sqoop从MySQL导入数据到Hive和HBase
基础环境 sqoop:sqoop-1.4.5+cdh5.3.6+78, hive:hive-0.13.1+cdh5.3.6+397, hbase:hbase-0.98.6+cdh5.3.6+115 S ...
- 22.把hive表中数据导入到mysql中
先通过可视化工具链接mysql,在链接的时候用sqoop 用户登录 在数据库userdb下新建表 保存,输入表名upflow 现在我们需要把hive里面的数据通过sqoop导入到mysql里面 sqo ...
随机推荐
- Nginx结构原理全解析
目录 一.Nginx简单介绍 二.Nginx优势 IO多路复用epoll模型 轻量级 Nginx的基本功能 .Nginx应用场景 Nginx代理 三.Nginx的结构解析 进程操作 事件模型 事件处理 ...
- [ZJCTF 2019]EasyHeap | house of spirit 调试记录
BUUCTF 上的题目,由于部分环境没有复现,解法是非期望的 house of spirit 第一次接触伪造堆的利用方式,exp 用的是 Pwnki 师傅的,本文为调试记录及心得体会. 逆向分析的过程 ...
- Python语言的2个典型特性
[动态编程语言] 学习过C.C++的同学都知道,使用这二者编写代码时,变量在使用前必须通过类似"int a=123"的语句提取申明,然后在真正赋值的时候校验取值跟类型是否相符.也就 ...
- Intellij IDEA中Springboot启动报Command line is too long错误
启动报错:Error running 'CmsFrontApplication': Command line is too long. Shorten command line for CmsFron ...
- Django网站实例效果
Django是一种开源的大而且全的Web应用框架,是由python语言来编写的,优点十分明显: 功能完善.要素齐全:自带大量常用工具和框架(比如分页,auth,权限管理), 适合快速开发企业级网站. ...
- MFC屏蔽按键ESC、ENTER、Alt+F4
1.重写 重写下面的函数 virtual BOOL PreTranslateMessage(MSG* pMsg); 2.函数体 BOOL Cfile_trans_codeDlg::PreTransla ...
- 【LeetCode】947. Most Stones Removed with Same Row or Column 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 并查集 日期 题目地址:https://leetco ...
- sql-labs 1-14
less-1: 1.采用二分法进行猜列: http://192.236.147.191:30000/Less-1/?id=1' order by 10--+ Welcome Dhakkan Un ...
- Netty 中的心跳机制
在TCP长连接或者WebSocket长连接中一般我们都会使用心跳机制–即发送特殊的数据包来通告对方自己的业务还没有办完,不要关闭链接. 网络的传输是不可靠的,当我们发起一个链接请求的过程之中会发生什么 ...
- 基于Spring MVC + Spring + MyBatis的【银行账户信息管理系统】
资源下载:https://download.csdn.net/download/weixin_44893902/45604661 练习点设计: 模糊查询.删除.新增.修改 一.语言和环境 实现语言:J ...