当前位置:   article > 正文

hive sql 函数

hive sql len

一、数学函数

164331_zRiD_2874009.png

164542_rnKi_2874009.png

二、聚合函数

164653_Xbld_2874009.png

165610_lfu0_2874009.png

三、其他内置函数

170050_8Fpp_2874009.png

170457_xon0_2874009.png

 

hive分析函数

union 和 union all

union 操作符用于合并两个或多个 SELECT 语句的结果集(追加到后面)。

如果允许重复的值,请使用 UNION ALL。

举例:

下面的例子中使用的原始表:

  1. Employees_China:
  2. E_ID E_Name
  3. 01 Zhang, Hua
  4. 02 Wang, Wei
  5. 03 Carter, Thomas
  6. 04 Yang, Ming
  7. Employees_USA:
  8. E_ID E_Name
  9. 01 Adams, John
  10. 02 Bush, George
  11. 03 Carter, Thomas
  12. 04 Gates, Bill
  13. -- 使用 UNION 命令
  14. SELECT E_Name FROM Employees_China union
  15. SELECT E_Name FROM Employees_USA
  16. -- 结果
  17. Zhang, Hua
  18. Wang, Wei
  19. Carter, Thomas
  20. Yang, Ming
  21. Adams, John
  22. Bush, George
  23. Gates, Bill
  24. -- 使用 union all 命令
  25. SELECT E_Name FROM Employees_China union
  26. SELECT E_Name FROM Employees_USA
  27. -- 结果
  28. Zhang, Hua
  29. Wang, Wei
  30. Carter, Thomas
  31. Yang, Ming
  32. Adams, John
  33. Bush, George
  34. Carter, Thomas
  35. Gates, Bill

 

left join

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

  1. -- "Persons" 表:
  2. Id_P LastName FirstName Address City
  3. 1 Adams John Oxford Street London
  4. 2 Bush George Fifth Avenue New York
  5. 3 Carter Thomas Changan Street Beijing
  6. -- "Orders" 表:
  7. Id_O OrderNo Id_P
  8. 1 77895 3
  9. 2 44678 3
  10. 3 22456 1
  11. 4 24562 1
  12. 5 34764 65
  13. -- 语句
  14. SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
  15. FROM Persons
  16. LEFT JOIN Orders
  17. ON Persons.Id_P=Orders.Id_P
  18. ORDER BY Persons.LastName
  19. -- 结果集:
  20. LastName FirstName OrderNo
  21. Adams John 22456
  22. Adams John 24562
  23. Carter Thomas 77895
  24. Carter Thomas 44678
  25. Bush George
  26. -- LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。

right join

RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

full join 

只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。

DISTINCT

DISTINCT 用于返回唯一不同的值。

  1. -- "Orders"表:
  2. Company OrderNumber
  3. IBM 3532
  4. W3School 2356
  5. Apple 4698
  6. W3School 6953
  7. -- 语句
  8. SELECT DISTINCT Company FROM Orders
  9. -- 结果:
  10. Company
  11. IBM
  12. W3School
  13. Apple

insert

insert overwrite 会覆盖已经存在的数据,我们假设要插入的数据和已经存在的N条数据一样,那么插入后只会保留一条数据;

insert into 只是简单的copy插入,不做重复性校验,如果插入前有N条数据和要插入的数据一样,那么插入后会有N+1条数据;

GROUPING SETS

在一个GROUP BY查询中,根据不同的维度组合进行聚合,等价于将不同维度的GROUP BY结果集进行UNION ALL

  1. SELECT month,day,COUNT(DISTINCT cookieid) AS uv,GROUPING__ID
  2. FROM lxw1234 GROUP BY month,day GROUPING SETS (month,day)
  3. ORDER BY GROUPING__ID;
  4. -- 等价于
  5. SELECT month,NULL,COUNT(DISTINCT cookieid) AS uv,1 AS GROUPING__ID FROM lxw1234 GROUP BY month
  6. UNION ALL
  7. SELECT NULL,day,COUNT(DISTINCT cookieid) AS uv,2 AS GROUPING__ID FROM lxw1234 GROUP BY day

CUBE

  1. SELECT
  2. month,
  3. day,
  4. COUNT(DISTINCT cookieid) AS uv,
  5. GROUPING__ID
  6. FROM lxw1234
  7. GROUP BY month,day
  8. WITH CUBE
  9. ORDER BY GROUPING__ID;
  10. -- 等价于
  11. SELECT NULL,NULL,COUNT(DISTINCT cookieid) AS uv,0 AS GROUPING__ID FROM lxw1234
  12. UNION ALL
  13. SELECT month,NULL,COUNT(DISTINCT cookieid) AS uv,1 AS GROUPING__ID FROM lxw1234 GROUP BY month
  14. UNION ALL
  15. SELECT NULL,day,COUNT(DISTINCT cookieid) AS uv,2 AS GROUPING__ID FROM lxw1234 GROUP BY day
  16. UNION ALL
  17. SELECT month,day,COUNT(DISTINCT cookieid) AS uv,3 AS GROUPING__ID FROM lxw1234 GROUP BY month,day

 

CUME_DIST

–CUME_DIST 小于等于当前值的行数/分组内总行数
–比如,统计小于等于当前薪水的人数,所占总人数的比例

  1. select * from lxw1234;
  2. d1 user1 1000
  3. d1 user2 2000
  4. d1 user3 3000
  5. d2 user4 4000
  6. d2 user5 5000
  7. -- 语句
  8. SELECT
  9. dept,
  10. userid,
  11. sal,
  12. CUME_DIST() OVER(ORDER BY sal) AS rn1,
  13. CUME_DIST() OVER(PARTITION BY dept ORDER BY sal) AS rn2
  14. FROM lxw1234;
  15. dept userid sal rn1 rn2
  16. -------------------------------------------
  17. d1 user1 1000 0.2 0.3333333333333333
  18. d1 user2 2000 0.4 0.6666666666666666
  19. d1 user3 3000 0.6 1.0
  20. d2 user4 4000 0.8 0.5
  21. d2 user5 5000 1.0 1.0
  22. -- rn1: 没有partition,所有数据均为1组,总行数为5,
  23. -- 第一行:小于等于1000的行数为1,因此,1/5=0.2
  24. -- 第三行:小于等于3000的行数为3,因此,3/5=0.6
  25. -- rn2: 按照部门分组,dpet=d1的行数为3,
  26. -- 第二行:小于等于2000的行数为2,因此,2/3=0.6666666666666666

COUNT

COUNT(column)返回某列的行数(不包括 NULL 值)
COUNT(*)返回被选行数

GROUP BY

  1. -- "Orders" 表:
  2. O_Id OrderDate OrderPrice Customer
  3. 1 2008/12/29 1000 Bush
  4. 2 2008/11/23 1600 Carter
  5. 3 2008/10/05 700 Bush
  6. 4 2008/09/28 300 Bush
  7. 5 2008/08/06 2000 Adams
  8. 6 2008/07/21 100 Carter
  9. -- 我们想要使用 GROUP BY 语句对客户进行组合。
  10. -- SQL 语句:
  11. SELECT Customer,SUM(OrderPrice) FROM Orders
  12. GROUP BY Customer
  13. -- 结果:
  14. Bush 2000
  15. Carter 1700
  16. Adams 2000

UCASE() 

UCASE 函数把字段的值转换为大写。

SELECT UCASE(column_name) FROM table_name

LCASE() 

LCASE 函数把字段的值转换为小写。

SELECT LCASE(column_name) FROM table_name

MID() 函数

MID 函数用于从文本字段中提取字符。

  1. -- 语法
  2. SELECT MID(column_name,start[,length]) FROM table_name
  3. -- 参数 描述
  4. -- column_name 必需。要提取字符的字段。
  5. -- start 必需。规定开始位置(起始值是 1)。
  6. -- length 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。
  7. -- "Persons" 表:
  8. Id LastName FirstName Address City
  9. 1 Adams John Oxford Street London
  10. 2 Bush George Fifth Avenue New York
  11. 3 Carter Thomas Changan Street Beijing
  12. -- 我们希望从 "City" 列中提取前 3 个字符。
  13. -- SQL 语句:
  14. SELECT MID(City,1,3) as SmallCity FROM Persons
  15. -- 结果:
  16. SmallCity
  17. Lon
  18. New
  19. Bei

LEN() 函数

LEN 函数返回文本字段中值的长度。

  1. -- 语法
  2. SELECT LEN(column_name) FROM table_name
  3. -- "Persons" 表:
  4. Id LastName FirstName Address City
  5. 1 Adams John Oxford Street London
  6. 2 Bush George Fifth Avenue New York
  7. 3 Carter Thomas Changan Street Beijing
  8. -- 我们希望取得 "City" 列中值的长度。
  9. -- SQL 语句:
  10. SELECT LEN(City) as LengthOfCity FROM Persons
  11. -- 结果:
  12. LengthOfCity
  13. 6
  14. 8
  15. 7

ROUND() 函数

ROUND 函数用于把数值字段舍入为指定的小数位数。

  1. -- 语法
  2. SELECT ROUND(column_name,decimals) FROM table_name
  3. -- 参数 描述
  4. -- column_name 必需。要舍入的字段。
  5. -- decimals 必需。规定要返回的小数位数。
  6. -- "Products" 表:
  7. Prod_Id ProductName Unit UnitPrice
  8. 1 gold 1000 g 32.35
  9. 2 silver 1000 g 11.56
  10. 3 copper 1000 g 6.85
  11. -- 我们希望把名称和价格舍入为最接近的整数。
  12. -- SQL 语句:
  13. SELECT ProductName, ROUND(UnitPrice,0) as UnitPrice FROM Products
  14. --结果:
  15. ProductName UnitPrice
  16. gold 32
  17. silver 12
  18. copper 7

 

转载于:https://my.oschina.net/u/2874009/blog/893521

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/654073
推荐阅读
相关标签
  

闽ICP备14008679号