1. 外部表和管理表的区别
1. 外部表和管理表都支持分区(partition),但是只有管理表使用分桶(bucket)
2. 管理表可以定义存储格式(如ORC),可以把外部表作为过渡表,最终导入到管理表中
2. 默认的配置参数比较适合通用场景,没有什么特殊情况的话一般不需要改动。比较有效的优化手段包括分区、分桶、存储格式、修改引擎等,其他的如压缩,join相关配置等视情况而定,不适合所有人。
3. 可以通过shell脚本执行hql文件,使用hive -hivevar 将变量传递到hql文件中
4. 我们的使用场景是这样的:
4.1 新建user_tmp的外部表,并按照日期分区,新建user 管理表,并分区分桶
4.2 每天凌晨通过 alter table user_tmp add partition (dt='2016-08-03') location '2016-08-03' 命令更新user_tmp数据,通过 insert overwrite table user partition(dt='2016-08-03') select uid,create_time from user_tmp where dt='2016-08-03' 更新user数据;
4.3 使用user表查询
5. 灵活使用hive的高级数据类型(array, struct, map)解决实际问题,如我们使用map类型表示url中的参数列表(id=11&name=aa&sex=1&....)
6. 相关文章
http://hadooptutorial.info/hive-performance-tuning/
http://hadooptutorial.info/category/hive/