数分实习中踩过的坑
记录一下数分实习中踩过的坑,好记性不如烂笔头,更何况我记性差到不能行,离职后能带走的也就只有自己的笔记经验和感受。
Hive SQL篇
-
SQL执行顺序
- from:作from子句前两个表的笛卡尔积
- on:应用on筛选器,筛选出满足on逻辑表达式的行
- join:根据join的条件选择是上一步的行还是外部行
- where:应用where筛选器
- group by:开始分组
- having:对groupby 生成的虚拟表应用having条件
- select:想要的字段列
- distinct:删除掉重复的行
- order by:根据条件进行排序
-
union 和 union all 的区别 :
1. union 对两个结果集进行并集操作,不包括重复行;且对结果排序。
2. union all 对两个结果集进行并集操作,包括重复行;不对结果排序。 -
去掉string中部分字符:
1. substring( 字段名, 起始位置,截取长度)
注:截取长度可省略
2. regexp_replace( 字段名, 被替换字符,替换字符) -
count一定要distinct否则计数无意义 (当然也可以group by啦)
关于两者性能之间的差别:
1. distinct 空间换时间,当数据集中时效率高,离散时效率低。
2. group by 时间换空间,当数据集中时效率低,离散时效率高。 -
解析json字段:
get_json_object( 字段名,$表示json变量标识然后用 . 或 [] 读取对象或数组 )
第二个参数具体要看要解析的json的结构是什么样的,然后再拆。
我会用网上json解析(eg:菜鸟json在线解析)看清结构再拆。 -
跑数前检查分区
避免数还没产出就跑,区分清楚全量表和增量表 -
date_sub() date_add()很好用
方便限定日期和分区统一一起改日期,第一个参数:日期,第二个参数:天数。 -
窗口函数 很重要:
<窗口函数> over (partition by <用于分组的列名>
order by <用于排序的列名>)<