• hive的常见判断与抽样函数


    1.If函数:if和case差不多,都是处理单个列的查询结果
    
    语法: if(boolean testCondition, T valueTrue, T valueFalseOrNull)
    
    返回值: T
    
    说明: 当条件testCondition为TRUE时,返回valueTrue;否则返回valueFalseOrNull
    
    举例:if(条件表达式,结果1,结果2)相当于java中的三目运算符,只是if后面的表达式类型可以不一样。
    
    hive> select if(a=a,’bbbb’,111) from lxw_dual;
    
    bbbb
    
    hive> select if(1<2,100,200) from lxw_dual;
    
    200
    hive (bigdata)> select if(1>2,10,20)
    > ;
    OK
    _c0
    20
    
    
    hive (bigdata)> select COALESCE(null,10,20);
    OK
    _c0
    10
    Time taken: 0.076 seconds, Fetched: 1 row(s)
    
    
    
    2.非空查找函数: COALESCE
    
    语法: COALESCE(T v1, T v2, …)
    
    返回值: T
    
    说明: 返回参数中的第一个非空值;如果所有值都为NULL,那么返回NULL
    
    hive> select COALESCE(null,’aaa’,50)from lxw_dual;
    
    aaa
    
    3.条件件判断函数:这种CASE A和if差不多,条件查询(常用)
    
    语法: CASE a WHEN b THEN c [WHENd THEN e]* [ELSE f] END
    
    返回值: T
    
    说明:如果a等于b,那么返回c;如果a等于d,那么返回e;否则返回f
    
    举例:
    
    hive> Select case 100 when 50 then 'tom'when 100 then 'mary' else 'tim' end from lxw_dual;
    
    mary
    
    hive> Select case 200 when 50 then 'tom'when 100 then 'mary' else 'tim' end from lxw_dual;
    
    tim
    
    4.条件判断函数:这种case,case后面没有表达式,用于处理单个列的查询结果
    
    语法: CASE WHEN a THEN b [WHEN cTHEN d]* [ELSE e] END
    
    返回值: T
    
    说明:如果a为TRUE,则返回b;如果c为TRUE,则返回d;否则返回e
    
    举例:
    
    hive> select case when 1=2 then 'tom'when 2=2 then 'mary' else 'tim' end from lxw_dual;
    
    mary
    
    hive> select case when 1=1 then 'tom'when 2=2 then 'mary' else 'tim' end from lxw_dual;
    
    tom
    
    实战演示:case匹配的结果属于一个新的字段
    
    
    select * from (
    
    select name ,id ,case
    
    when id <=1235 then 'low salary'
    
    when id >1235 and id <=1236 then 'middle'
    
    else 'very high'
    
    end
    
    from mytest_staff_info_demo4_cp1 where statis_date='20180228') b
    
    查询结果:
    
    name id _c2
    
    'account1' 1234 low salary
    
    'account2' 1235 low salary
    
    'account3' 1235 low salary
    
    'account4' 1236 middle
    
    'account5' 1237 very high
    
    
    SELECT COUNT(1) FROM (SELECT * FROM udata TABLESAMPLE (200 ROWS)) x;
    SELECT * FROM udata TABLESAMPLE (50 PERCENT);
    select * from table_name where col=xxx order by rand() limit num; 
    SELECT * FROM lxw1 TABLESAMPLE (30M);
  • 相关阅读:
    解决 SQL Server Profiler 跟踪[不断]出现检索数据
    Linq表达式开窍
    CSS3——动画效果
    MongoDB学习与BUG解答
    MongoDB 客户端 MongoVue
    Memcached——分布式缓存
    WRONGTYPE Operation against a key holding the wrong kind of value
    Redis——分布式简单使用
    HTML5——播放器
    HTML5——行走日记
  • 原文地址:https://www.cnblogs.com/hejunhong/p/10792217.html
Copyright © 2020-2023  润新知