大数据技术架构(组件)8——Hive:Function Cases & UDF/UDTF/UDAF 1

1.3、Function Cases

1.3.1、窗口函数

row_number:使用频率 ★★★★★

rank :使用频率 ★★★★

dense_rank:使用频率 ★★★★

rank/dense_rank/row_number对比

first_value:使用频率 ★★★

last_value:使用频率 ★

lead:使用频率 ★★

lag:使用频率 ★★

1.3.2、集合相关

collect_set:使用频率 ★★★★★

collect_list:使用频率 ★★★★★

sort_array:使用频率 ★★★

1.3.3、URL相关

parse_url:使用频率 ★★★★

reflect:使用频率 ★★

1.3.4、JSON相关

get_json_object:使用频率 ★★★★★

1.3.5、列转行相关

explode:使用频率 ★★★★★

1.3.6、Cube相关

GROUPING SETS:使用频率 ★

1.3.7、字符相关

concat:使用频率 ★★★★★

concat_ws:使用频率 ★★★★★

instr:使用频率 ★★★★

length:使用频率 ★★★★★

size:使用频率 ★★★★★

trim:使用频率 ★★★★★

regexp_replace:使用频率 ★★★★★

regexp_extract:使用频率 ★★★★

substring_index:使用频率 ★★

1.3.8、条件判断

if:使用频率 ★★★★★

case when :使用频率 ★★★★★

coalesce:使用频率 ★★★★★

1.3.9、数值相关

round:使用频率 ★★

ceil:使用频率 ★★★

floor:使用频率 ★★★

hex:使用频率 ★

1.3.10、时间相关(比较简单)

from_unxitime:使用频率 ★★★★★

unix_timestamp:使用频率 ★★★★★

to_date:使用频率 ★★★★★

year:使用频率 ★★★★★

month:使用频率 ★★★★★

day:使用频率 ★★★★★

date_add:使用频率 ★★★★★

date_sub:使用频率 ★★★★★

1.4、UDF/UDTF/UDAF

UDF:用户自定义函数

主要功能:一对一输入输出,如substr,date_add,instr,size等。

public final class Lower extends UDF {
    public Text evaluate(final Text s) {
        if (s == null) { return null; }
        return new Text(s.tostring().toLowerCase());
    }
}

UDTF:拆解函数

主要功能:一对多输入输出,如explode,array,json_tuple等

限制(可以使用lateral view 替代):

1、Select语句中不允许使用其他的表达式

2、不能嵌套,如explode(explode(adid_list))

3、不支持GROUP BY / CLUSTER BY / DISTRIBUTE BY / SORT BY

自定义:

public class GenericUDTFCount2 extends GenericUDTF {
    Integer count = Integer .value0f(e);
    Object forwardobjl] = new Object[1];
    @Override
    public void close() throws HiveException {
        forwardobj[0] = count;
        forward(forwardObj);
        forward(forwardObi);
    }

    @Override
    public StructObjectInspector initialize(ObjectInspector[] argOIs) throWs UDFArgumentException {
        ArrayList<String> fieldNames = new ArrayList<string>();
    ArrayList<ObjectInspector> fieldOIs = new ArrayList<ObjectInspector>();fieldNames .add("col1");
fieldoIs.add(Primitive0bjectInspectorFactory.javaIntObjectInspector);return ObjectInspectorFactory.getStandardstructObjectInspector(fieldNames,fieldoIs);
@Override
public void process(Object[] args) throws HiveException {count = Integer .valueof(count.intValue() + 1);

UDAF:聚合函数

主要功能:sum,avg,min,max,collect_set

自定义函数:参考org.apache.hadoop.hive.ql.udf.generic.GenericUDAFMax

源码测试用例: ql/src/test/queries/clientpositive

1.4.1、函数帮助

注意:Hive中所有的关键词都是忽略大小写的。无论是通过Beeline还是CLI模式,都可以通过以下命令来查看Hive 函数

-- 查看所有的函数
show functions;
-- 查看具体某个函数的帮助手册
desc function function name;
-- 查看函数示例功能
desc function extended function name;

注意点:当hive.cache.expr.evaluation参数设置为true的时候(当然默认值就是true),在0.12.0、0.13.0和0.13.1版本中,使用UDF嵌套到其他UDF函数中可能会有问题。具体可以见HIVE-7314

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mylife512

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值