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;
    //该模式下必须指定一个静态分区
  • 相关阅读:
    高格-远程支持中的奇怪问题【15】
    关于er图的几个工具
    如何解决win10明明是管理员还要权限的问题
    判断日期天数
    谈一谈在公司两次压测我总结的思路
    vue学习之-----v-model数据双向绑定,自定义组件父子传参
    Js各种小技巧总结
    openlayers学习之-----核心类
    openlayers学习之-----把坐标点改为WKT格式的数据
    新书介绍 -- 《Redis核心原理与实践》
  • 原文地址:https://www.cnblogs.com/skyl/p/4776083.html
Copyright © 2011-2022 走看看