Hive SQL函数大全:常用函数一览

Hive SQL函数大全:常用函数一览

Hive SQL是基于Hadoop的数据仓库工具,提供了丰富的内置函数,用于数据处理、转换和分析。本文将详细介绍Hive SQL中常用的函数,涵盖字符串函数、日期函数、数学函数、集合函数、条件函数以及窗口函数等,并提供示例说明,帮助读者更好地理解和应用这些函数。

一、字符串函数

字符串函数用于操作和处理字符串数据。以下是一些常用的字符串函数:

  • length(str): 返回字符串的长度。
    sql
    SELECT length('Hello World'); -- 输出 11

  • lower(str) / upper(str): 将字符串转换为小写/大写。
    sql
    SELECT lower('Hello World'), upper('Hello World'); -- 输出 hello world, HELLO WORLD

  • substr(str, start, len) / substring(str, start, len): 提取子字符串,从start位置开始,提取len个字符。
    sql
    SELECT substr('Hello World', 7, 5); -- 输出 World

  • trim(str): 去除字符串两端的空格。
    sql
    SELECT trim(' Hello World '); -- 输出 Hello World

  • ltrim(str) / rtrim(str): 去除字符串左端/右端的空格。
    sql
    SELECT ltrim(' Hello World '), rtrim(' Hello World '); -- 输出 Hello World , Hello World

  • concat(str1, str2, ...) / ||: 连接多个字符串。
    sql
    SELECT concat('Hello', ' ', 'World'), 'Hello' || ' ' || 'World'; -- 输出 Hello World, Hello World

  • regexp_replace(str, pattern, replacement): 使用正则表达式替换字符串。
    sql
    SELECT regexp_replace('Hello World', 'World', 'Hive'); -- 输出 Hello Hive

  • split(str, delimiter): 使用分隔符分割字符串,返回一个数组。
    sql
    SELECT split('Hello,World,Hive', ','); -- 输出 ["Hello","World","Hive"]

  • find_in_set(str, strList): 查找字符串在字符串列表中的位置。
    sql
    SELECT find_in_set('World', 'Hello,World,Hive'); -- 输出 2

二、日期函数

日期函数用于处理日期和时间数据。

  • current_date() / current_timestamp(): 返回当前日期/当前时间戳。
    sql
    SELECT current_date(), current_timestamp();

  • year(date) / month(date) / day(date): 提取日期的年/月/日。
    sql
    SELECT year('2023-10-27'), month('2023-10-27'), day('2023-10-27'); -- 输出 2023, 10, 27

  • date_add(date, days) / date_sub(date, days): 日期加/减指定天数。
    sql
    SELECT date_add('2023-10-27', 7), date_sub('2023-10-27', 7);

  • datediff(date1, date2): 计算两个日期之间的天数差。
    sql
    SELECT datediff('2023-10-27', '2023-10-20'); -- 输出 7

  • unix_timestamp() / from_unixtime(unixtime): 将当前时间转换为Unix时间戳/将Unix时间戳转换为日期时间。
    sql
    SELECT unix_timestamp(), from_unixtime(unix_timestamp());

  • date_format(date, format): 格式化日期。
    sql
    SELECT date_format('2023-10-27', 'yyyy-MM-dd HH:mm:ss'); -- 输出 2023-10-27 00:00:00

三、数学函数

数学函数用于执行数学运算。

  • round(num) / floor(num) / ceil(num): 四舍五入/向下取整/向上取整。
    sql
    SELECT round(3.14), floor(3.14), ceil(3.14); -- 输出 3, 3, 4

  • rand(): 生成随机数。
    sql
    SELECT rand();

  • abs(num): 取绝对值。
    sql
    SELECT abs(-5); -- 输出 5

  • pow(num, power) / power(num, power): 计算幂次方。
    sql
    SELECT pow(2, 3), power(2, 3); -- 输出 8, 8

  • sqrt(num): 计算平方根。
    sql
    SELECT sqrt(9); -- 输出 3

四、集合函数

集合函数用于对一组值进行操作。

  • size(array): 返回数组的大小。
    sql
    SELECT size(array('a','b','c')); -- 输出 3

  • map_keys(map) / map_values(map): 返回map的键/值集合。
    sql
    SELECT map_keys(map('a', 1, 'b', 2)), map_values(map('a', 1, 'b', 2)); -- 输出 ["a","b"], [1,2]

五、条件函数

条件函数根据条件返回不同的值。

  • if(condition, true_value, false_value): 如果条件为真,返回true_value,否则返回false_value。
    sql
    SELECT if(1 > 0, 'true', 'false'); -- 输出 true

  • case when condition1 then result1 when condition2 then result2 else resultN end: 类似于switch语句。
    sql
    SELECT case when 1 > 0 then 'true' else 'false' end; -- 输出 true

  • coalesce(value1, value2, ...): 返回第一个非空值。
    sql
    SELECT coalesce(NULL, 'Hello', 'World'); -- 输出 Hello

六、窗口函数

窗口函数对一组行执行计算,这些行与当前行相关。

  • row_number() over (partition by column1 order by column2): 分组排序后,为每行分配一个唯一的行号。

  • rank() over (partition by column1 order by column2): 分组排序后,为每行分配一个排名,允许并列排名。

  • dense_rank() over (partition by column1 order by column2): 与rank()类似,但不允许并列排名。

  • lag(column, offset, default) over (partition by column1 order by column2) / lead(column, offset, default) over (partition by column1 order by column2): 访问当前行之前/之后的行的数据.

  • sum(column) over (partition by column1 order by column2 rows between preceding 2 and current row): 计算移动平均值等。

以上列举了Hive SQL中常用的函数,涵盖了各种数据类型的操作和处理。熟练掌握这些函数能够 greatly 提高数据处理的效率和灵活性。 希望本文能够帮助读者更好地理解和应用Hive SQL函数,在实际工作中发挥其强大作用。 当然,Hive SQL还提供了更多其他的内置函数,读者可以参考官方文档进行更深入的学习和探索。

THE END