Hive中的3种虚拟列以及Hive如何进行条件判断
Hive中的3种虚拟列
当Hive产生非预期的数据或null时,可以通过虚拟列进行诊断,判断哪行数据出现问题,主要分3种:
1. INPUT__FILE__NAME
每个map任务输入文件名
2. BLOCK__OFFSET__INSIDE__FILE
map任务处理的数据所对应文件的块内偏移量,当前全局文件的偏移量。对于块压缩文件,就是当前块的文件偏移量,即当前块的第一个字节在文件中的偏移量
3. ROW__OFFSET__INSIDE__BLOCK
行偏移量,默认不可用。需要设置hive.exec.rowoffset=true来启用
Hive条件判断
Hive中可能会遇到根据判断不同值,产生对应结果的场景,有三种实现方式:if、coalesce、case when。
- if( condition, true value, false value)
只能用来判断单个条件。
示例:select if(col_name=‘张三’,1,0) as x from tab;
- coalesce( value1,value2,… )
获取参数列表中的首个非空值,若均为null,则返回null。
示例select coalesce(null,null,5,null,1,0) as x; 返回5
- case when
可以与某字段多个比较值的判断,并分别产生不同结果,与其他语言中case语法相似。
selectcase col_namewhen "张三" then 1when "李四" then 0else 2end as x
from tab;
或:
selectcasewhen col_name="张三" then 1when col_name="李四" then 0else 2end as x
from tab;