HIVE的transform函数的使用
函数 hive transform 使用
2023-09-14 08:58:38 时间
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
相关文章
- oracle 不是单组分组函数 查询条数,oracle不是单组分组函数 不是单组分组函数怎么解决…
- Hooks与普通函数的区别
- hive grouping函数_Merge函数
- hive etl 通过 ETL engine 读取 Hive 中的数据
- 让时间序列预测结果更真实的损失函数
- SQL SERVER 2012新增函数之逻辑函数CHOOSE详解
- Hive学习之路 (十五)Hive分析窗口函数(三) CUME_DIST和PERCENT_RANK详解大数据
- Hive学习之路 (五)DbVisualizer配置连接hive详解大数据
- 连接Hive使用JDBC连接远程MySQL服务器(hive远程mysql)
- hive运用Oracle、HDFS和Hive实现大数据分析(oraclehdfs)
- 存储利用Hive管理MySQL元数据(hive元数据mysql)
- Linux下函数处理路径的技巧(linux路径函数)
- Linux atoi函数的应用(linuxatoi)
- Linux中的mmap函数:内存映射文件技术(mmaplinux)
- 深度探索Linux中的calloc函数(linuxcalloc)
- 比较:Hive与MySQL的优势比较(hive和mysql)
- 解析MySQL中的TOP函数及其应用场景(mysql中top函数)
- 玩转信息时代从Hive转向Oracle(hive转oracle)
- Hive数据抽取Oracle一体化解决方案(hive抽到oracle)
- Hive与Oracle那种数据库更适合你(hive对比oracle)
- 利用Hive实现Oracle数据库的迁移(hive 到oracle)
- 调整Oracle函数参数增加长度(oracle修改函数长度)
- Hive的数据存储与管理MySQL与Hive结合的最佳实践(mysql下hive)
- 利用Oracle合计函数加快数据处理(oracle中的合计函数)
- 函数式JavaScript编程指南
- php下几个常用的去空、分组、调试数组函数
- 一个字符串反转函数可实现字符串倒序