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的输入字段为dtuid,输出处理后的前两个字段,并命名为date, count,写入到pv_users_reduced表中。

这里有几个细节:

  • mapper和reducer用到的script可以是任何可执行文件。注意如果用到的是本地文件,应当在语句开始前用ADD FILEADD 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 BYSORT BY的简写,这两者可以认为对应与Hadoop的partition和sort过程。如果partition和sort的key是不同的,可以使用DISTRIBUTE BYSORT BY分别指定。
  • MAPREDUCE关键字是SELECT TRANSFORM关键字的别名,原文中给出了上面等价代码
    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;

    因此,原文中特别提醒,MAP并没有强制产生一个map过程的作用,REDUCE同理。只是为了阅读更清晰。

Hive的Transform功能

时间: 2024-10-27 04:51:10

Hive的Transform功能的相关文章

[HIve - LanguageManual] Transform [没懂]

Transform/Map-Reduce Syntax SQL Standard Based Authorization Disallows TRANSFORM TRANSFORM Examples Schema-less Map-reduce Scripts Typing the output of TRANSFORM Transform/Map-Reduce Syntax Users can also plug in their own custom mappers and reducers

在CSS3中,可以利用transform功能来实现文字或图像的旋转、缩放、倾斜、移动这四种类型的变形处理

CSS3中的变形处理(transform)属 transform的功能分类 1.旋转 transform:rotate(45deg); 该语句使div元素顺时针旋转45度.deg是CSS 3的"Values and Units"模块中定义的一个角度单位. 2.缩放 transform:scale(0.8,1); 使用缩放的方法实现文字或图像的缩放效果,在参数中指定缩放倍率.该语句使用scale方法使该元素在水平方向上缩小了20%,垂直方向上不缩放. 3.倾斜 transform:ske

MaxCompute重装上阵 第五弹 - SELECT TRANSFORM

摘要: MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个BU的核心业务. MaxCompute除了持续优化性能外,也致力于提升SQL语言的用户体验和表达能力,提高广大ODPS开发者的生产力. MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个BU的核心业务. MaxCompute除了持续优化性能外,也致力于提升SQL语言的用户体验和

【原】hive 操作笔记

1.建表: hive> CREATE TABLE pokes (foo INT, bar STRING);hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);由于很多数据在hadoop平台,当从hadoop平台的数据迁移到hive目录下时,由于hive默认的分隔符是/u0001,为了平滑迁移,需要在创建表格时指定数据的分割符号,语法如下:create table ooo(uid string,n

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

Hive 函数

1. 内置运算符在Hive有四种类型的运算符:· 关系运算符· 算术运算符· 逻辑运算符· 复杂运算内容较多,见<Hive官方文档>或者<hive常用运算和函数.doc>2. 内置函数https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF测试各种内置函数的快捷方法:创建一个dual表create table dual(id string);load一个文件(只有一行内容:内容为一个空格)到dual表se

HIVE的高级操作

二.视图 1.Hive 的视图和关系型数据库的视图区别 和关系型数据库一样,Hive 也提供了视图的功能,不过请注意,Hive 的视图和关系型数据库的数据还是有很大的区别: (1)只有逻辑视图,没有物化视图: (2)视图只能查询,不能 Load/Insert/Update/Delete 数据: (3)视图在创建时候,只是保存了一份元数据,当查询视图的时候,才开始执行视图对应的 那些子查询 2.Hive视图的创建语句 create view view_cdt as select * from cd

Hive基本语法操练

建表规则如下: CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (

变形属性 transform

transform功能可以实现文字或图像的旋转.绽放.倾斜.与移动: 注意点:1.其移动.旋转.倾斜.与绽放这4种效果的使用先后顺序不同,页面会显示不同的结果: 2.属性值有一个参数与有多个参数的别: 3.在用移动效果时注意其移动方向(很容易在不看效果时,不知向那移动): tansform的属性值: 2D时: 1.translate(x,y):有两个参数,第一个参数表示水平方向上移动,第二个参数表示垂直方向上移动,注意---当只写一个参数时表示只在水平方向上移动,垂直方向上不移动: