Hive(四)hive函数与hive shell
一、hive函数

1、hive内置函数
(1)内容较多,见《 Hive 官方文档》
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
(2)详细解释:
http://blog.sina.com.cn/s/blog_83bb57b70101lhmk.html
(3) 测试内置函数的快捷方式:
1、创建一个 dual 表 create table dual(id string);
2、 load 一个文件(一行,一个空格)到 dual 表
3、 select substr('huangbo',2,3) from dual;
(4)查看内置函数 show functions;
显示函数的详细信息 desc function abs;
显示函数的扩展信息 desc function extended concat;
(5)详细使用见文档
2、hive自定义函数
当 Hive 提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函 数
UDF ( user-defined function)作用于单个数据行,产生一个数据行作为输出。(数学函数, 字符串函数)
UDAF(用户定义聚集函数 User- Defined Aggregation Funcation):接收多个输入数据行,并产 生一个输出数据行。( count, max)
3、一个简单的UDF函数示例:
(1)先开发一个简单的 java 类,继承 org.apache.hadoop.hive.ql.exec.UDF,重载 evaluate 方法

(2)打成jar包上传到服务器
(3) 将 jar 包添加到 hive 的 classpath
hive>add JAR /root/hivejar /udf.jar;
(4)创建临时函数与开发好的 class 关联起来
Hive>create temporary function tolowercase as ' com.mazh.udf. ToLowerCase ';
(5)至此,便可以在 hql 在使用自定义的函数
select tolowercase(name),age from studentss;
4、Transform实现 (把json数据中timeStamp字段变成日期编号)
Hive 的 TRANSFORM 关键字提供了在 SQL 中调用自写脚本的功能。适合实现 Hive 中没有的 功能又不想写 UDF 的情况
具体以一个实例讲解。
(1)先加载 rating.json 文件到 hive 的一个原始表 rat_json
create table rat_json(line string) row format delimited;
load data local inpath '/root/rating.json' into table rat_json;
(2) 创建 rate 这张表用来存储解析 json 出来的字段:
create table rate(movie int, rate int, unixtime int, userid int) row format delimited fields
terminated by '\t';
解析 json,得到结果之后存入 rate 表:
insert into table rate select get_json_object(line,'$.movie') as moive,get_json_object(line,'$.rate')
as rate,get_json_object(line,'$.timeStamp') as unixtime,get_json_object(line,'$.uid') as userid
from rat_json;
(3)使用 transform+python 的方式去转换 unixtime 为 weekday
先编辑一个 python 脚本文件
vi weekday_mapper.py
#!/bin/python
import sys
import datetime
for line in sys.stdin:
line = line.strip()
movie,rate,unixtime,userid = line.split('\t')
weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()
print '\t'.join([movie, rate, str(weekday),userid])
保存文件
然后,将文件加入 hive 的 classpath:

最后查询看数据是否正确:
select distinct(weekday) from lastjsontable;
二、Hive Shell 操作
1、hive 命令行

语法结构:
hive [-hiveconf x=y]* [<-i filename>]* [<-f filename>|<-e query-string>] [-S]
说明:
(1) -i 从文件初始化 HQL。
(2) -e 从命令行执行指定的 HQL
(3) -f 执行 HQL 脚本
(4) -v 输出执行的 HQL 语句到控制台
(5) -p <port> connect to Hive Server on port number
(6) -hiveconf x=y( Use this to set hive/hadoop configuration variables)
(7)-S 表示以不打印日志的形式执行 (hive -S -e ......)
实例:
(1)

(2)运行一个文件

(3)运行参数文件
从配置文件启动 hive,并加载配置文件当中的配置参数

2、hive参数配置方式
hive参数大全:https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties
开发 Hive 应用时,不可避免地需要设定 Hive 的参数。设定 Hive 的参数可以调优 HQL 代码 的执行效率,或帮助定位问题。然而实践中经常遇到的一个问题是,为什么设定的参数没有起作用?这通常是错误的设定方式导致的。
对于一般参数,有以下三种设定方式:
配置文件 (全局有效)
命令行参数(对 hive 启动实例有效) (hive -i ...)
参数声明 (对 hive 的连接 session 有效)(进入hive客户端之后设置)
优先级:参数声明 高于命令行参数 高于配置文件
(1)配置文件: Hive 的配置文件包括
用户自定义配置文件: $HIVE_CONF_DIR/hive-site.xml
默认配置文件: $HIVE_CONF_DIR/hive-default.xml
用户自定义配置会覆盖默认配置。
另外, Hive 也会读入 Hadoop 的配置,因为 Hive 是作为 Hadoop 的客户端启动的, Hive 的配
置会覆盖 Hadoop 的配置。
配置文件的设定对本机启动的所有 Hive 进程都有效。
(2)命令行参数:启动 Hive(客户端或 Server 方式)时,可以在命令行添加-hiveconf param=value
来设定参数,例如:
bin/hive -hiveconf hive.root.logger=INFO,console
这一设定对本次启动的 Session(对于 Server 方式启动,则是所有请求的 Sessions)有效。
(3)
参数声明:可以在 HQL 中使用 SET 关键字设定参数,例如:
set mapred.reduce.tasks=100;
这一设定的作用域也是 session 级的。
set hive.exec.reducers.bytes.per.reducer=<number> 每个 reduce task 的平均负载数据量 hive 会估算我们的总数据量,然后用总数据量除以上述参数值,就能得出需要运行的 reduce task 数
set hive.exec.reducers.max=<number> 设置 reduce task 数量的上限
set mapreduce.job.reduces=<number> 指定固定的 reduce task 数量 但是,这个参数在必要时<业务逻辑决定只能用一个 reduce task> hive 会忽略
上述三种设定方式的优先级依次递增。即参数声明覆盖命令行参数,命令行参数覆盖配置文 件设定。注意某些系统级的参数,例如 log4j 相关的设定,必须用前两种方式设定,因为那 些参数的读取在 Session 建立以前已经完成了。
Hive(四)hive函数与hive shell的更多相关文章
- 【Hive学习之二】Hive SQL
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 apache-hive-3.1.1 ...
- HIVE扩展GIS函数
按项目日益增长的gis数据量要求,需要在大数据集群中部署HIVE的扩展函数. Apache Hive是一个建立在Hadoop架构之上的数据仓库.它能够提供数据的精炼,查询和分析.([引 ...
- Hive内置函数和自定义函数的使用
一.内置函数的使用 查看当前hive版本支持的所有内置函数 show function; 查看某个函数的使用方法及作用,比如查看upper函数 desc function upper; 查看upper ...
- hive自定义UDTF函数叉分函数
hive自定义UDTF函数叉分函数 1.介绍 从聚合体日志中需要拆解出来各子日志数据,然后单独插入到各日志子表中.通过表生成函数完成这一过程. 2.定义ForkLogUDTF 2.1 HiveUtil ...
- Hive中自定义函数
Hive的自定义的函数的步骤: 1°.自定义UDF extends org.apache.hadoop.hive.ql.exec.UDF 2°.需要实现evaluate函数,evaluate函数支持重 ...
- Hive自己定义函数的使用——useragent解析
想要从日志数据中分析一下操作系统.浏览器.版本号使用情况.可是hive中的函数不能直接解析useragent,于是能够写一个UDF来解析.useragent用于表示用户的当前操作系统,浏览器版本号信息 ...
- hive的row_number()函数
hive的row_number()函数 功能 用于分组,比方说依照uuid分组 组内可以依照某个属性排序,比方说依照uuid分组,组内按照imei排序 语法为row_number() over (pa ...
- [转]hive中自定义函数(UDAF)实现多行字符串拼接为一行
函数如何使用: hive> desc concat_test;OKa intb string hive> select * from concat_test;OK1 ...
- Hadoop生态圈-hive编写自定义函数
Hadoop生态圈-hive编写自定义函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
随机推荐
- Spark任务执行期间写临时文件报错导致失败
spark任务在执行期间,有时候会遇到临时目录创建失败,导致任务执行错误. java.io.IOException: Failed to create local dir in -- spark执行过 ...
- Linux内核学习笔记(7)--完全公平调度(CFS)
一.完全公平调度算法 完全公平调度 CFS 的出发点基于一个简单的理念:进程调度的效果应该如同系统具备一个理想中的完美多任务处理器.在这种系统中,每个进程能够获得 1/n 的处理器时间(n 为可运行进 ...
- Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
1. 摘要 训练深层的神经网络非常困难,因为在训练的过程中,随着前面层数参数的改变,每层输入的分布也会随之改变.这需要我们设置较小的学习率并且谨慎地对参数进行初始化,因此训练过程比较缓慢. 作者将这种 ...
- HTML/CSS的基本使用
本篇博客主要介绍一下HTML/CSS的基本使用,关于它们的介绍便不在赘述,读者可自行google或百度. 一.HTML 先来简单介绍一下HTML标签: HTML 标签是由尖括号包围的关键词,比如 &l ...
- drupal CVE-2018-7600 复现
1.系统环境 Drupal 8.5 linux 主机 ruby 代码 2.原理说明 影响版本 Drupal 6.x,7.x,8.x 参考:CVE-2018-7600漏洞分析 3.利用 在Python2 ...
- windows8和windows server2012不联网安装.net 3.5(包括2.0和3.0)
安装完win8后 发现系统默认没有安装.net3.5 如果使用在线更新的话需要很久才能完成,特别是当前的网速以及微软的服务器.速度很忙,其实我们利用win8的安装盘就可以不需要联网更新,而且几分钟就搞 ...
- pygame (1) 移动小乌龟
小乌龟图片素材: 第一个简单的小游戏: 小乌龟会不断的移动,并且每当到达窗口的左右边界的时候,还会自动的掉头. 源码: import pygame import sys# 导入sys模块,退出时使用 ...
- 02慕课网《vue.js2.5入门》——Vue中的组件,实现todolist
TodoList功能开发 例子:输入字符,在列表中显示: 由于有v-for属性,<li>不会被渲染,它已经和数据绑定在一起,有数据来决定 input和button上都有事件监听器,inpu ...
- MyEclipse快捷方式
选择你要注释的那一行或多行代码,按Ctrl+/即可,取消注释也是选中之后按Ctrl+/即可. 如果你想使用的快捷键的注释是的话,那么你的快捷键是ctrl+shift+/我以前都是手动注释的,直接打// ...
- LNMP环境+ 前后端项目部署+redis+redis扩展
LNMP 环境 (参照https://lnmp.org/install.html) wget -c http://soft.vpser.net/lnmp/lnmp1.4.tar.gz & ...