zoukankan      html  css  js  c++  java
  • HiveQL学习

    1.当hive执行join内存溢出时,可以修改hive的配置文件hive-site.xml,增大内存,如下:

    • < property >
    • < name >mapred.child.java.opts< /name >
    • < value >-Xmx 1024m < /value >
    • < /property >

    2.hive默认建表时的路径也可以在hive-site.xml里配置,如下:

    • < property >
    • < name >hive.metastore.warehouse.dir< /name >
    • < value >/user/hive/warehouse< /value >
    • < description >location of default database for the warehouse< /description >
    • < /property >

    3.执行join操作的时候,尽量把小表放前面,大表放前面可能会因为内存溢出而出错

    4.对分区表进行操作需要对分区进行过滤(如:ds=$yday)。 特别是在JOIN操作的时候,分区过滤(如:ds=$yday)需要放到 ON语句 或子查询 里面。不能放到ON后面的WHERE里,这样会扫描所有表,最后才判断分区。也就是说程序会先执行JOIN操作,才会执行最后的WHERE操作。

    5.在JOIN操作中,后面被连续JOIN且同一字段,只会执行一个mapreduce操作。

    SELECT * FROM a LEFT OUTER JOIN b ON a.t=b.t LEFT OUTER JOIN c ON a.t=c.t; 推荐的

    SELECT * FROM a LEFT OUTER JOIN b ON a.t=b.t LEFT OUTER JOIN c ON b.t=c.t; 效率低下的

    6.当一个大表和一个很小的表进行JOIN操作的时候,使用MAPJOIN操作,这样会把小表读入内存进行JOIN,只需要一个map操作JOIN就完成了

    select /*+ mapjoin(a)*/ a.c1,b.c2,b.c3 from a join b on a.c4=b.c4;

    7.通过设置hive.merge.mapfiles可以关闭hive对于扫描表的优化,但有时候会提高效率。默认值为true。可以视情况设置:只含有SELECT的语句 或 MAPJOIN 推荐使用

    8.ALTER TABLE a SET SERDEPROPERTIES('serialization.null.format' = ''); 可以使结果表不出现\N字符串,而用空串代替

  • 相关阅读:
    博客索引
    【转载】学习顺序:顶级会议 ----> 顶级期刊 ------> 基础教材(博客) / 论文复现
    【神游篇00】关于自己的日常学习记录
    【1】ML简介
    【2】Neural Network学习
    【1】NNDL简介
    【1】Deep Learning简介
    【1】PRML简介
    【1】BRML简介
    图集压缩,,命令行工具
  • 原文地址:https://www.cnblogs.com/end/p/2721554.html
Copyright © 2011-2022 走看看