HIVE的transform函数的使用
Hive的TRANSFORM
关键字提供了在SQL中调用自写脚本的功能,适合实现Hive中没有的功能又不想写UDF的情况。例如,按日期统计每天出现的uid
数,通常用如下的SQL
- SELECT date, count(uid)
- FROM xxx
- GROUP BY date
但是,如果我想在reduce阶段对每天的uid
形成一个列表,进行排序并输出,这在Hive中没有现成的功能。那么,可以自写脚本实现该功能,并用TRANSFORM
关键字调用
- SELECT TRANSFORM(date, uid)
- FROM xxx
- CLUSTER BY date
这是一个类似streaming的功能,但是可以更方便的访问Hive中的数据,也可以把SQL语句和自写脚本整合在一起运行。
简单分析官网上的一个例子
- FROM (
- FROM pv_users
- SELECT TRANSFORM(pv_users.userid, pv_users.date)
- USING 'map_script'
- AS dt, uid
- CLUSTER BY dt
- ) map_output
- INSERT OVERWRITE TABLE pv_users_reduced
- SELECT TRANSFORM(map_output.dt, map_output.uid)
- USING 'reduce_script'
- AS date, count;
这段代码的大致工作流程描述如下:
map_script
作为mapper,reduce_script
作为reducer。将pv_users
表中的userid
, date
两列作为mapper的输入字段,处理后的输出的前两个字段分别命名为dt
, uid
,并按照dt
字段作partition和sort送给reduce阶段处理。reducer的输入字段为dt
和uid
,输出处理后的前两个字段,并命名为date
, count
,写入到pv_users_reduced
表中。
这里有几个细节:
- mapper和reducer用到的script可以是任何可执行文件。注意如果用到的是本地文件,应当在语句开始前用
ADD FILE
或ADD FILES
将文件加入进来 - mapper和reducer的输入输出都是以TAB为分隔符
- 如果
USING ‘script’
语句后面没有AS
,则Hive默认script
的输出中第一个TAB之前的字段为key,后面的部分全部为value。若指定了AS
,则严格按照AS
后面的字段数输出,例如AS dt, uid
,则输出前两个字段并忽略后面的字段。此外,AS
语句可以指定数据类型,如AS (date STRING, count INT)
。默认都是string
类型。 CLUSTER BY
关键字是DISTRIBUTE BY
和SORT BY
的简写,这两者可以认为对应与Hadoop的partition和sort过程。如果partition和sort的key是不同的,可以使用DISTRIBUTE BY
和SORT BY
分别指定。MAP
和REDUCE
关键字是SELECT TRANSFORM
关键字的别名,原文中给出了上面等价代码- 因此,原文中特别提醒,
MAP
并没有强制产生一个map过程的作用,REDUCE
同理。只是为了阅读更清晰。
- FROM (
- FROM pv_users
- MAP pv_users.userid, pv_users.date
- USING 'map_script'
- AS dt, uid
- CLUSTER BY dt
- ) map_output
- INSERT OVERWRITE TABLE pv_users_reduced
- REDUCE map_output.dt, map_output.uid
- USING 'reduce_script'
- AS date, count;
转自:https://blog.csdn.net/u013385925/article/details/78780798
HIVE的transform函数的使用的更多相关文章
- Hive的Transform功能
Hive的TRANSFORM关键字提供了在SQL中调用自写脚本的功能,适合实现Hive中没有的功能又不想写UDF的情况.例如,按日期统计每天出现的uid数,通常用如下的SQL SELECT date, ...
- Hive自己定义函数的使用——useragent解析
想要从日志数据中分析一下操作系统.浏览器.版本号使用情况.可是hive中的函数不能直接解析useragent,于是能够写一个UDF来解析.useragent用于表示用户的当前操作系统,浏览器版本号信息 ...
- sklearn中各算法类的fit,fit_transform和transform函数
在使用PCA和NFC中有三个函数fit,fit_transform,transform区分不清各自的功能.通过测试,勉强了解各自的不同,在这里做一些笔记. 1.fit_transform是fit和tr ...
- HIVE扩展GIS函数
按项目日益增长的gis数据量要求,需要在大数据集群中部署HIVE的扩展函数. Apache Hive是一个建立在Hadoop架构之上的数据仓库.它能够提供数据的精炼,查询和分析.([引 ...
- c++中transform()函数和find()函数的使用方法。
1.transform函数的使用 transform在指定的范围内应用于给定的操作,并将结果存储在指定的另一个范围内.transform函数包含在<algorithm>头文件中. 以下是s ...
- hive的row_number()函数
hive的row_number()函数 功能 用于分组,比方说依照uuid分组 组内可以依照某个属性排序,比方说依照uuid分组,组内按照imei排序 语法为row_number() over (pa ...
- Hadoop生态圈-hive编写自定义函数
Hadoop生态圈-hive编写自定义函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Hadoop生态圈-Hive的自定义函数之UDTF(User-Defined Table-Generating Functions)
Hadoop生态圈-Hive的自定义函数之UDTF(User-Defined Table-Generating Functions) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Hadoop生态圈-Hive的自定义函数之UDAF(User-Defined Aggregation Function)
Hadoop生态圈-Hive的自定义函数之UDAF(User-Defined Aggregation Function) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
随机推荐
- Activity(活动)生命周期--项目测试
一.新建一个Activitylifetest项目,允许Android Studio帮我们自动创建活动和布局,并且勾选Luancher Activity来将创建的活动设置为主活动. 可以参考: http ...
- [NOIP2011]聪明的质检员
[问题描述] 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有$n$个矿石,从 1 到$n$逐一编号,每个矿石都有自己的重量$w_i$以及价值$v_i$.检验矿产的流程是: 1. 给 ...
- IOS集成到支付宝的步骤及问题
一,在支付宝开放平台下载支付宝SDK(https://openhome.alipay.com/platform/document.htm#down) 二,添加sdk文件到xcode 1,新建一个ali ...
- 记一个有趣的Java OOM!
原文:https://my.oschina.net/u/1462914/blog/1630086 引言 熟悉Java的童鞋,应该对OOM比较熟悉.该类问题,一般都比较棘手.因为造成此类问题的原因有很多 ...
- Mac下php 5升级到php 7的步骤详解
前言 在MAC OS X 10.11中php的版本是5.5的,近来一年多里,看到了很多关于php7介绍,以为php7增加了很多新特性,也删除了原来很多的老特性,所以一直以来并没想去尝试使用php7,但 ...
- Unity-EasyTouch插件之One Finger
这节课,我们主要讲下单个手指的测试.比如单击啊,双击啊,拖动,单手滑动等. 单击: public class TouchTest : MonoBehaviour { // Subscribe to e ...
- Cookie个数压缩存存储实践
提到cookie,大家都不会陌生的,几乎涉及到交互或统计的WEB系统都会使用到cookie,关于cookie的基础知识网上也有很多,这里推荐两篇文章: 聂微东的: http://www.cnblogs ...
- linux自定义开机启动服务和chkconfig使用方法
linux自定义开机启动服务和chkconfig使用方法 1. 服务概述在linux操作系统下,经常需要创建一些服务,这些服务被做成shell脚本,这些服务需要在系统启动的时候自动启动,关闭的时候自动 ...
- fragment shader的优化
ALU: 浮点数精度 选择性降低 shader 指令数 替换一些计算减小指令sqrt, sin, cos, recip 光照 计算用lightmap(用memory sample换计算) vertex ...
- LightOJ - 1265 Island of Survival 期望
题目大意:有一个生存游戏,里面t仅仅老虎,d仅仅鹿,另一个人,每天都要有两个生物碰面,如今有下面规则 1.老虎和老虎碰面.两仅仅老虎就会同归于尽 2.老虎和人碰面或者和鹿碰面,老虎都会吃掉对方 3.人 ...