hive函数(hive函数replace)

本篇文章给大家谈谈hive函数,以及hive函数replace对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Hive开窗函数

first_value:取分组内排序后,截止到当前行,第一个值;

last_value:取分组内排序后,截止到当前行,最后一个值;

lead(col, n, default):用于统计窗口内往下第n行值。第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为null时,取默认值,如不指定则为null);

lag(col, n, default):与lead相反,用于统计窗口内往上第n行值。第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为null时,取默认值,如不指定,则为null)。

1)使用标准的聚合函数 count、sum、min、max、avg

2)使用 partition by 语句,使用一个或多个原始列

3)使用 partition by 与 order by 语句,使用一个或多个分区或者排序列

4)使用窗口规范,窗口规范支持以下格式:

当 ORDER BY 后面神耐缺少窗口从句条件,窗口规范默认是 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW .

当 ORDER BY 和窗口从句都缺失, 窗口规范默认是 ROW BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING .

OVER 从句高枝支持以下函数, 但是并不支持和窗口一起使用它们。

Ranking 函数: Rank, NTile, DenseRank, CumeDist, PercentRank .

Lead 和 Lag 函数.

row_number() :从1开始,按照顺序生成组内记录的序列,比如按照pv降序排列生成分组内的pv排名;获取分组内的top1记录;获取一个session内的第一条记录等等。

rank() :生成数据项在分组内的排名,排名相等会在名次中留下空位。

dense_rank() :生成数据项在分组内的排名,排名相对不会在名次中留下空位。

cume_dist :小于等于当前值的行数/分组内总行数。比如,统计小于等于当前薪资的人数占总人数的比例。

percent_rank : (分组内当前行的rank值-1)/(分组内总行数-1)。

ntile(n) :用于将分组数据按照顺序切游念春分成n片,返回当前切片值,如果切片不均匀,默认增加第一个切片的分布。 ntile 不支持 rows between ,比如 ntile(2) over(partition by cookieied order by createtime rows between 3 preceding and current row) 。

4、测试数据集

[img]

Hive内置函数之时间函数

零、生产常用粗搏组合方式

(0.1)离线数仓获取昨天的日期作为分区,格式yyyyMMdd

regexp_replace(date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),1) ,'-','')

或者

date_format(date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),1),'yyyyMMdd')

一、源码部分

Hive的函数类为:org.apache.hadoop.hive.ql.exec.FunctionRegistry

二、常用时间函数

对于函数,除了知道怎么用,还需要知道返回值是什么类型,这里给出官方文档,文档中给出了函数的返回值类型

官方文档见:

(2.1)from_unixtime(bigint unixtime[, string format])

示例:

select from_unixtime(1591627588); -- 2020-06-08 22:46:28

select from_unixtime(1591627588,'yyyyMMddHHmmss'); -- 20200608224628

(2.2)unix_timestamp()、unix_timestamp(string date)、unix_timestamp(string date, string pattern)

示例:

select unix_timestamp('2020-06-08 22:50:00'); -- 1591627800

select unix_timestamp('20200608225000','yyyyMMddHHmmss'); -- 1591627800

(2.3)to_date(string timestamp)

示例:

SELECT to_date('2009-07-30 04:17:52'); -- 2009-07-30

(2.4)year(string date)、month(string date)、day(string date)、hour(string date)、minute(string date)、second(string date)

这些函数是差不多的,弯脊都是从一个时间字符串中抽取出某个特定的时间字段。具有相同功能的还有extract(field FROM source)函数

示例:

SELECT day('2009-07-29 20:30:40'); -- 29

SELECT minute('2009-07-29 20:30:40'); -- 30

(2.5)date_add(date/timestamp/string startdate, tinyint/smallint/int days)、date_sub(date/timestamp/string startdate, tinyint/smallint/埋凳渗int days)

这两个功能是类似的

示例:

SELECT date_add('2009-07-30 20:50:59', 1); -- 2009-07-31

(2.6)datediff(string enddate, string startdate)

截图中结果是错误的,应该为-1。

示例:

SELECT datediff('2009-06-30', '2009-07-02'); -- -2

SELECT datediff('2009-07-30', '2009-07-28'); -- 2

(2.7)current_date、current_timestamp

这两个函数使用desc function extended 查看会报错

示例:

(2.8)date_format(date/timestamp/string ts, string fmt)

示例:

SELECT date_format('2015-04-08', 'yyyyMMdd'); -- 20150408

hive窗口函数总结

根据官网的介绍,hive推出的窗口函数功能是对hive sql的功能增强,确实目前用于离线数据分析逻辑日趋复杂,很多场景都需要用到。以下就是对hive窗口函数的一个总结附上案例。

PRECEDING:往前

FOLLOWING:往后

CURRENT ROW:当前行

UNBOUNDED:起点(一般结合PRECEDING,FOLLOWING使用)

UNBOUNDED PRECEDING 表示该窗口最前面的行(起点)

UNBOUNDED FOLLOWING:表示该窗口最后面的行(终点)

比如说:

ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW(表示从起点到当前行)

ROWS BETWEEN 2 PRECEDING AND 1 FOLLOWING(表示往前2行到往后1行)

ROWS BETWEEN 2 PRECEDING AND 1 CURRENT ROW(表示往前2行到当前行)

ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING(表示当前行到终点)

官网有一段话列出了哪些窗口函数是不支持window子句的,如下图所示:

1.LEAD(col,n,DEFAULT) 用于统计窗口内往下第n行值第一个参数为列名,第二个参数为往下第n行(可选,默认为1,不可为负数),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL)

2.LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值第一个参数为列名,第二个参数为往上第n行(可选,默认为1,不可为负数),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)

3.FIRST_VALUE取分组内排序局宏后,截止到当前行,第一个值,这最多需要两个参数。第一个参数是您想要第一个值的列,第二个(可选桐信册)参数必须是false默认为布尔值的布尔值。如果设置为true,则跳过空值。

4.LAST_VALUE取分组内排序后,截止到当前行,最后一个值,这最多需要两个参数。第一个参数是您想要第一个值的列,第二个(可选)参数必须是false默认为布尔值的布尔值。如果设置为true,则跳过空值。

让我们加上window子句来观察一下变化,虽然FIRST_VALUE和LAST_VALUE不常于与window子句结合使用。

1.COUNT

2.SUM

3.MIN

4.MAX

5.AVG

目前支持这五种带有聚合意义的窗口函数,以常用SUM举例。

从结果当中其实可以得到结论,默认情况就是从起点到当前行,不带order by语句其实就是表示窗口内全部行都参与聚合处理,这里其实还有其他用法,读者坦枯可以自行尝试一下。

1.ROW_NUMBER

从1开始,按照顺序,生成分组内记录的序列,row_number()的值不会存在重复,当排序的值相同时,按照表中记录的顺序进行排列;通常用于获取分组内排序第一的记录;获取一个session中的第一条refer等。

2.RANK

生成数据项在分组中的排名,排名相等会在名次中留下空位。

3.DENSE_RANK

生成数据项在分组中的排名,排名相等会在名次中不会留下空位。

4.CUME_DIST

CUME_DIST 小于等于当前值的行数/分组内总行数

5.PERCENT_RANK

PERCENT_RANK 分组内当前行的RANK值-1/分组内总行数-1

6.NTILE

NTILE(n) 用于将分组数据按照顺序切分成n片,返回当前切片值,如果切片不均匀,默认增加第一个切片的分布。NTILE不支持ROWS BETWEEN

以上是带有分析功能的窗口函数,使用的频率没有上面两类高,但是也是需要掌握的。

我们先对1-3三种分析窗口函数进行演示

第4-5种:

第六种:NTILE

hive内置函数有哪些

hive内置函数有:

1、在HIVE会话中add自定义函数的jar文件,然后创建function,继而使用函数。

2、在进入HIVE会话之前先自动执行创建function,不用用户手工创建。

3、把自定义的函数写坦猛到系统函数中,使之成为HIVE的一个默认函数。

关系函数

等值比较:=,语法:A=B。如果表达式A与表达式B相等,则为TRUE;否慧巧则为FALSE。

不等值比较:,语法:AB。如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A与表达式B不相等,则为TRUE;否则为FALSE。

小于比较:,语法:AB。如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A小于表达式B,则为TRUE;否则为FALSE。

小于等于比较:=,语法:A=B。如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A小于或者等于表达式B,则为TRUE;否则前信键为FALSE。

大于等于比较:=,语法:A=B。如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A大于或者等于表达式B,则为TRUE;否则为FALSE。

语法:A[NOT]LIKEB。如果字符串A或者字符串B为NULL,则返回NULL;如果字符串A符合表达式B的正则语法,则为TRUE;否则为FALSE。

关于hive函数和hive函数replace的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表