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函数的使用的更多相关文章

  1. Hive的Transform功能

    Hive的TRANSFORM关键字提供了在SQL中调用自写脚本的功能,适合实现Hive中没有的功能又不想写UDF的情况.例如,按日期统计每天出现的uid数,通常用如下的SQL SELECT date, ...

  2. Hive自己定义函数的使用——useragent解析

    想要从日志数据中分析一下操作系统.浏览器.版本号使用情况.可是hive中的函数不能直接解析useragent,于是能够写一个UDF来解析.useragent用于表示用户的当前操作系统,浏览器版本号信息 ...

  3. sklearn中各算法类的fit,fit_transform和transform函数

    在使用PCA和NFC中有三个函数fit,fit_transform,transform区分不清各自的功能.通过测试,勉强了解各自的不同,在这里做一些笔记. 1.fit_transform是fit和tr ...

  4. HIVE扩展GIS函数

        按项目日益增长的gis数据量要求,需要在大数据集群中部署HIVE的扩展函数.     Apache Hive是一个建立在Hadoop架构之上的数据仓库.它能够提供数据的精炼,查询和分析.([引 ...

  5. c++中transform()函数和find()函数的使用方法。

    1.transform函数的使用 transform在指定的范围内应用于给定的操作,并将结果存储在指定的另一个范围内.transform函数包含在<algorithm>头文件中. 以下是s ...

  6. hive的row_number()函数

    hive的row_number()函数 功能 用于分组,比方说依照uuid分组 组内可以依照某个属性排序,比方说依照uuid分组,组内按照imei排序 语法为row_number() over (pa ...

  7. Hadoop生态圈-hive编写自定义函数

    Hadoop生态圈-hive编写自定义函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  8. Hadoop生态圈-Hive的自定义函数之UDTF(User-Defined Table-Generating Functions)

    Hadoop生态圈-Hive的自定义函数之UDTF(User-Defined Table-Generating Functions) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  9. Hadoop生态圈-Hive的自定义函数之UDAF(User-Defined Aggregation Function)

    Hadoop生态圈-Hive的自定义函数之UDAF(User-Defined Aggregation Function) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

随机推荐

  1. Very Good!——C语言初学者百题大战之二

    #include<stdio.h> int main() { printf("***************\n\n Very Good!\n\n***************& ...

  2. Educational Codeforces Round 8 D. Magic Numbers 数位DP

    D. Magic Numbers 题目连接: http://www.codeforces.com/contest/628/problem/D Description Consider the deci ...

  3. jQuery插件示例笔记

    插件的种类 封装对象方法的插件 将对象方法封装起来,用于对通过选择器获取的jQuery对象进行操作. //注意,为了更好的兼容性开始前有个分号 ;(function($){ //此处将$作为匿名函数的 ...

  4. udev详解

    转:http://www.360doc.com/content/10/0215/11/551936_15865336.shtml 如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Li ...

  5. 普通项目转换成maven项目

    参看文档:http://czj4451.iteye.com/blog/1983889 maven仓库:http://mvnrepository.com/     基本步骤如下: Configue--& ...

  6. Scut快速开发

    1     开发环境 Scut Lib版本:5.2.3.2 需要安装的软件 a)        IIS和消息队列(MSMQ) b)        数据库,Sql2005以上版本 c)        V ...

  7. iOS Web应用开发:运用HTML5、CSS3与JavaScript

    <iOS Web应用开发:运用HTML5.CSS3与JavaScript> 基本信息 原书名:Pro iOS web design and development:HTML5, CSS3, ...

  8. EasyUI datagrid 复选框可以多选但不能全选功能实现

    1.功能需求:  实现多选,但是不能够全选功能 2.js代码 //帮卖列表页面,可以多选但是不能够全选实现 $(".datagrid-header-check").children ...

  9. cas如何去掉HTTPS认证?

    说明:默认情况下HTTP也是可以访问CAS SERVER的,但认证,登陆,退出等操作均没有任何的效果.所以必须作出下面的修改  1.进入WEB-INF\spring-configuration目录 打 ...

  10. Binary Tree Preorder Traversal -- leetcode

    Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary t ...