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