数据库系列之hive

hive架构,执行原理略过,只记录下hive中遇到的坑

语法细节

关键字

像between和 >=作用类型是所有类型

group by order by

关于这些以及列别名的讨论,在官方wiki上就有。大体就是所有不是聚合函数的查询列,包括使用了函数的查询列必须和原封不动的以函数的形式出现在group中,同事他们在group 中还不能用别名

COALESCE

COALESCE(T v1, T v2, …) 这是一个可变参数列表,可以作用在很多的参数上。
返回参数中的第一个非空值;如果所有值都为NULL,那么返回NULL
特殊示例

1
select empno,ename,job,mgr,hiredate,sal, COALESCE(comm, 0),deptno from emp;

示例中的其实就作用了一个值,意味着遇到的第一个数就是comm,是不是非空,非空就是本身,否则返回零。这种写法case when 更加简洁

参考资料

  1. 1
  2. 重点看,数据示例
  3. 3

其他

  1. 熟悉sql 到hive的编译过程 和 sql 本身的执行顺序。都是保证优化hivesql 的关健
  2. hive与传统sql并没有太多变化
  3. hive sql 是不尊姓ansi的 和 mysql比较像
  4. hive 查询列不能引用别的查询列笔名,sum(xx)/alias 报错group by key

hive json解析path $.xx 如果需要取内层数据 不需要嵌套get_json_object,直接$.xx.yy即可,这一点在presto也是同样的