zoukankan      html  css  js  c++  java
  • Hive相关随笔

    1).Hive中Select Top N的实现

    Hive中使用 Order by + Limit 可以很容易地实现Select Top N

    但是在Hive中Order by只能使用1个Reduce,如果表的数据量很大,那么Order by就会力不从心。相对的,Sort by可以启动多个Reduce,每个Reduce做局部排序。

    从执行计划explain中可以看出Sort by Limit N启动了两个MR Job。第一个Job是在每个Reduce中做局部排序,然后分别取Top N。假设启动了M个reduce,第二个Job再对M个Reduce分别局部排好序的总计M * N条数据做全局排序,再取最终的Top N,从而得到想要的结果。这样就可以大大提高Select Top N的效率。

    set mapred.reduce.tasks=3;
    select * from tea sort by age limit 3;

    2).hive中的分号字符

    分号是SQL语句结束标记,在HiveQL中也是,但是在HiveQL中,对分号的识别没有那么智慧,例如:

    hive> select concat(';','a');
    --会报异常NoViableAltException(-1@[]),解决方案:
    
    hive> select concat('73','a');
    --分号的ASCII值是59,八进制为073.只能使用八进制,对于十六进制无效
    --concat(str1,str2)作用为拼接字符串

    3).Hive客户端默认配置

    以下操作均可在$HIVE_HOME/bin/.hiverc文件中保存,设置为默认参数

    set hive.mapred.mode=strict;
    //开启strict模式,以下情况报错:(1)没有limit限制的order by语句.(2)动态分区插入
    
    set hive.cli.print.current.db=true;
    //显示当前工作的数据库
    
    set hive.cli.print.header=true;
    //显示列名
    
    set mapred.reduce.tasks=3;
    //设置reduce的个数
    
    set hive.exec.reducers.bytes.per.reducer;
    //多少字节开一个reducer,默认256000000
    
    set hive.exec.dynamic.partition.mode=strict;
    //该模式下必须指定一个静态分区
  • 相关阅读:
    *** 82 删除排序链表中的重复元素II
    83 删除排序链表中的重复元素
    61 旋转链表
    ASP.NET MVC3 ModelState.IsValid为false的问题
    ServletContext
    ServletConfig
    Servlet线程安全
    Servlet的一些细节(2)
    Servlet的一些细节(1)
    Servlet的接口实现类
  • 原文地址:https://www.cnblogs.com/skyl/p/4776083.html
Copyright © 2011-2022 走看看