与数据库的区别:
查询语言相似、执行引擎不相似
数据更新不同、延时性不同
索引
数据规模、可扩张性
元数据信息:
表名、数据库名、内外表、位置、所有者、字段名
操作:
-e 执行后面sql语句
-f后面执行sql文件
case:sum(case name when “zhangsna” then 1 else 0 end)
行转列:CONCAT,CONCAT_WS
列转行:lateral view explode(id) tabelview as colomnview; COLLECT_SET(col)
窗口函数:over()
排名函数:RANK() 排序相同时会重复,总数不会变
DENSE_RANK()排序相同时会重复,总数会减少
ROW_NUMBER() 会根据顺序计算
分区与分桶:
分区是文件夹,针对存储路径
分桶是针对数据文件
优化:
抽样查询:select * from stu tablesample(bucket 1 out of 4
on id);理解1和4的意思
小表在后面
where可以减少数据量的放在后面
fetch抓取设置为more
本地模式set hive.exec.mode.local.auto=true; 根据文件大小和数量
mapjoin开启
优化groupby操作:hive.map.aggr = true;hive.groupby.skewindata = true
关于null:使用nvl进行null的转化。join先去除null或者给null一个随机值
动态分区:insert into stu partition (p_time)
select id, time, uid, p_time from ori_partitioned;
并行执行 :hive.exec.parallel=true;
JVM重用:mapred-site.xml设置mapreduce.job.jvm.numtasks