Hive函数使用方法

窗口函数

over(partition by  分组  order by 排序  rows between  起始行  and  结束行)
​
-- 向上无限制
unbounded preceding
-- 指定向上的行数
行数  preceding
-- 当前行
current row
-- 向下几行
1 following 
-- 向下无限制
unbounded following
配合聚合函数使用
聚合方法  over()
  • sum

  • avg

  • count()

  • max

  • min

配合取值函数一起使用
取值函数  over()
取值函数  over(order by 字段)
  • lag(字段,间隔行,默认值) 向上找数据

    • 间隔行,间隔几行取值 默认是1行 可选

    • 默认值,如果取不到值使用默认值 可选

  • lead(字段,间隔行,默认值) 向下找数据

  • frist_value 取第一个值

  • last_value 取最后一个值

select name ,
       lag(name) over () as l1,
       lag(name,3) over () l2,
       lag(name,3,'itcast') over () l3,
       lead(name) over () lead1,
       lead(name,3) over () lead2,
       lead(name,3,'itheima') over () lead3,
       first_value(name) over() f1,
       last_value(name) over() last1
from tb_stu5;

image-20240813095922683

配合生成序号函数一起使用
序号函数 over(order by 字段)
  • rank

    • 生成不连续序号

  • desen_rank

    • 生成连续序号

  • row_number

    • 生成行号

select age,
       rank() over (order by age) as rk,
       dense_rank() over (order by age  ) as drk,
       row_number() over (order by age) as rn
       from tb_stu5;

image-20240813101221814

### Hive函数使用教程 在头歌平台上,Hive函数使用方法主要涉及SQL语句中的内置函数和窗口函数。以下是对Hive函数使用的详细说明: #### 1. Hive内置函数 Hive提供了丰富的内置函数,用于数据处理和分析。这些函数可以分为以下几类[^3]: - **字符串函数**:如`CONCAT`、`SUBSTRING`等。 - **数学函数**:如`ABS`、`ROUND`等。 - **日期函数**:如`FROM_UNIXTIME`、`DATEDIFF`等。 - **条件函数**:如`IF`、`CASE WHEN`等。 例如,在查询中使用`CONCAT`函数连接字符串: ```sql SELECT CONCAT('Hello', ' ', 'World') AS greeting; ``` #### 2. 窗口函数 窗口函数Hive中非常强大的工具,允许对一组数据进行计算而不丢失原始行数。窗口函数的基本语法为[^2]: ```sql function_name(...) OVER ([PARTITION BY partition_expression] [ORDER BY sort_expression] [ROWS BETWEEN start AND end]) ``` - `PARTITION BY`:将数据划分为多个分区。 - `ORDER BY`:定义排序规则。 - `ROWS BETWEEN`:指定窗口范围。 例如,使用窗口函数计算每家公司薪资排名: ```sql SELECT company_name, salary, RANK() OVER (PARTITION BY company_name ORDER BY salary DESC) AS rank FROM table1; ``` #### 3. 实验环境配置 在头歌平台上进行Hive实验时,需要完成以下步骤[^4]: - 创建数据库和表结构。 - 加载数据到表中。 - 使用SQL语句进行查询和分析。 例如,创建一个包含学生信息的表并加载数据: ```sql CREATE DATABASE IF NOT EXISTS db1; USE db1; CREATE TABLE IF NOT EXISTS student ( name STRING, age INT, score DOUBLE ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE; LOAD DATA LOCAL INPATH '/path/to/data.csv' INTO TABLE student; ``` #### 4. 示例:多表统计 假设需要统计两个表的数据,可以使用`JOIN`结合窗口函数完成。例如,统计每个城市的平均薪资并按城市排序: ```sql SELECT city_code, AVG(salary) AS avg_salary FROM table1 GROUP BY city_code ORDER BY avg_salary DESC; ``` 如果需要进一步对结果进行排名,可以结合窗口函数: ```sql SELECT city_code, avg_salary, RANK() OVER (ORDER BY avg_salary DESC) AS rank FROM ( SELECT city_code, AVG(salary) AS avg_salary FROM table1 GROUP BY city_code ) subquery; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小球-大数据

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

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

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

打赏作者

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

抵扣说明:

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

余额充值