关于hive:Hive常用函数整理

57次阅读

共计 1287 个字符,预计需要花费 4 分钟才能阅读完成。

记录 hive 三类函数:取整函数、随机抽样(rand() 函数)、数组蕴含函数(array_contains)、later view explode 函数

取整函数

  1. round(A,B) :
    四舍五入,A 是整型或者浮点型参数,B 是要保留的小数位数,B 是可选参数,不写的话默认对浮点数保留一位小数

    select round(-1.23,1)
    > -1.2
    select round(2.546,2)
    > 2.55
    select round(2.34)
    > 2.3
  2. floor(A):取坐标轴上的左值

    select floor(-1.3) 
    > -2
    select floor(1.3) 
    > 1
  3. ceil(A):取坐标轴上的右值 ,select floor(-1.3)

    select ceil(-1.3) 
    > -1
    select ceil(1.3) 
    > 2

    抽样函数 (rand())

    在大规模数据量的数据集上有两种应用形式,能够随机抽取小数据量的数据进行数据分析和建模:

  4. order by rand() 是对全局的数据做排序,会把所有数据放进一个 reducer 中解决,如果数据量十分大,可能会比拟耗时:

    select * from table_name where col=xxx order by rand() limit num;
  5. 在 rand() 前指定 distribute 和 sort 关键字能够保证数据在 mapper 和 reduce 阶段都是随机的,distribute by 是管制在 map 端如何拆分数据给 reduce 端的,sort by 是部分排序,会在每个 reduce 端做排序,实用于数据量较大的状况:

    select * from table_name where col=xxx distribute by rand() sort by rand() limit num;

    数组蕴含函数,用于判断数组中是否蕴含某个值,返回 true 或 false

    array_contains(数组,值),返回布尔类型值

    select *
    from dulux_dataset_101  where array_contains(mark,'10')
    limit 10

later view expload

explode() 是 UDTF 函数的一种,能够将一行数据依照分隔符变成多行,然而不能和其它列一起查出,例如 dulux_dataset_101 中 mark 字段是个数组

select
explode(mark) as mark_explode
from dulux_dataset_101
limit 10

这样就会间接报错,因为 mainid 能返回的行数和 mark_explode 不统一

select mianid,explode(mark) as mark_explode
from dulux_dataset_101
limit 10

于是要和 lateral view 搭配应用,temptable 为虚构表的别名,mark_explode 为切分后的字段名

select mainid,mark_explode
from dulux_dataset_101 
lateral view explode(mark) temptable as mark_explode
 where array_contains(mark,'10')
limit 10

正文完
 0