hive命令4
1.分区注意事项
(1)挑选一列作为分区键,其唯一值的个数应在较低值到中间值之间
(2)避免分区小于1GB(越大越好)
(3)当分区数量较多时,调整HiveServer2和Hive Metastore的内存
(4)当使用多列作为分区键时,对于每一个分区键列的组合都要创建一个子目录的
嵌套树。应该避免深入嵌套,因为这回导致太多的分区,进而使创建的文件非常小
(5)当使用hive流处理插入数据时,如果多个会话向相同的分区写入数据,那么就会导致锁闭
(6)可以修改某一分区表的模式,但是,一旦结构发生变化,就无法在已有分区中修改数据了
(7)如果要将数据并行插入到多个分区,应该将
hive.optimize.sort.dynamic.partition设置为true
2.对日期列进行高效分区
如:日期中按照"YYYY-MM-DD"格式比按照 年月日各自的值进行多深度分区在某些时候
更加高效。
使用单个字符串的优势:它允许使用更多的SQL运算符,例如:LIKE,IN,BETWEEN,
但是如果采用嵌套分区,就不太容易使用这些运算符了
3.案例
假设有表A,通过DataStamp字符串按照"YYYY-MM-DD"格式进行分区,SQL查询如下
查询选择特定日期:
select * from table A where DataStamp IN (‘2015-01-01’,‘2016-02-02’,‘2017-03-03’);
查询一年中所有的日期
select * from table A where DataStamp LIKE ‘2018-%’;
查询一年中特定月的所有日期
select * from table A where DataStamp LIKE ‘2019-02-%’;
查询所有以5开始/结束的日子
select * from table A where DataStamp LIKE ‘%-%-%5’;
查询2015年1月1日到2015年3月1日的所有日子
select * from table A where DataStamp BETWEEN ‘2015-01-01’ AND ‘2015-03-01’;