zoukankan      html  css  js  c++  java
  • 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表中的useriddate两列作为mapper的输入字段,处理后的输出的前两个字段分别命名为dtuid,并按照dt字段作partition和sort送给reduce阶段处理。reducer的输入字段为dtuid,输出处理后的前两个字段,并命名为datecount,写入到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关键字的别名,原文中给出了上面等价代码
    • 因此,原文中特别提醒,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

  • 相关阅读:
    2019 年百度之星—初赛一 B题 Game
    蒲公英
    集训队8月17日
    CodeForces 550E Brackets in Implications 推理
    11076: 小P的集合 位运算
    树状数组区间修改版本模板
    Contest1692
    POJ
    树状数组进阶-区间修改+区间查询
    具体数学-第二章-和式
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/9361681.html
Copyright © 2011-2022 走看看