hive默认查询不会显示列名, 当一个表字段比较多的时候,往往看不出值与列之间的对应关系,对日常查错及定位问题带来不便,像下面这样。
  1. hive>
  2. >select * from example_table where dt='2012-03-31-02' limit 2;
  3. OK
  4. NULL    315103  2012-12-24_month
    NULL    10106   2013-01-07_day
    NULL    15368   2013-01-14_day
    NULL    356742  2013-02-28_month
    NULL    14253   2013-03-24_day
  5. Time taken: 1.104 seconds, Fetched: 5 row(s)

开启行转列功能之后:

  1. set hive.cli.print.header=true; // 打印列名
  2. set hive.cli.print.row.to.vertical=true; // 开启行转列功能, 前提必须开启打印列名功能
  3. set hive.cli.print.row.to.vertical.num=1; // 设置每行显示的列数。
  4. > select * from example_table where pt='2012-03-31-02' limit 2;
  5. OK
  6. visitid count   dt
  7. NULL    315103  2012-12-24_month
    NULL    10106   2013-01-07_day
    NULL    15368   2013-01-14_day
    NULL    356742  2013-02-28_month
    NULL    14253   2013-03-24_day
(行列转换功能在公司hive中实验未成功实现,实际上行列转换之后的效果:
vistid=NULL
count=315103  
dt=2012-12-24_month
-------------------------Gorgeous-split-line-----------------------
vistid=NULL
count=10106   
dt=2013-01-07_day
开启行转列功能后, 每一行都已列显示, 值前面都加上列名, 方便问题查找!

 

如果遇到一个hive的问题,如下hive sql:

select f.a,f.b from A t join B f  on ( f.a=t.a and f.ftime=20110802)

该语句中B表有30亿行记录,A表只有100行记录,而且B表中数据倾斜特别严重,有一个key上有15亿行记录,在运行过程中特别的慢,而且在reduece的过程中遇有内存不够而报错。

为了解决用户的这个问题,考虑使用mapjoin,mapjoin的原理:

MAPJION会把小表全部读入内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配,由于在map是进行了join操作,省去了reduce运行的效率也会高很多

这样就不会由于数据倾斜导致某个reduce上落数据太多而失败。于是原来的sql可以通过使用hint的方式指定join时使用mapjoin。

select /*+ mapjoin(A)*/ f.a,f.b from A t join B f  on ( f.a=t.a and f.ftime=20110802)

再运行发现执行的效率比以前的写法高了好多。

mapjoin还有一个很大的好处是能够进行不等连接的join操作,如果将不等条件写在where中,那么mapreduce过程中会进行笛卡尔积,运行效率特别低,如果使用mapjoin操作,在map的过程中就完成了不等值的join操作,效率会高很多。

例子:

select A.a ,A.b from A join B where A.a>B.a

简单总结一下,mapjoin的使用场景:

1. 关联操作中有一张表非常小

2.不等值的链接操作

Hive使用技巧的更多相关文章

  1. 一起学Hive——总结常用的Hive优化技巧

    今天总结本人在使用Hive过程中的一些优化技巧,希望给大家带来帮助.Hive优化最体现程序员的技术能力,面试官在面试时最喜欢问的就是Hive的优化技巧. 技巧1.控制reducer数量 下面的内容是我 ...

  2. [hive小技巧]使用limit查询变成抽样,而不是全盘扫描

    将set hive.limit.optimize.enable=true 时,limit限制数据时就不会全盘扫,而是根据限制的数量进行抽样. 同时还有两个配置项需要注意: 1.hive.limit.r ...

  3. [hive小技巧]增加hive并行度

    可以通过修改set hive.exec.parallel=true来修改并行度.如果job中并行执行的阶段增多,那么集群利用率会增加.

  4. hive 日常技巧

    --删除表中重复数据 delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by ...

  5. hive进阶 技巧

    1.日期格式转换(将yyyymmdd转换为yyyy-mm-dd) select from_unixtime(unix_timestamp('20180905','yyyymmdd'),'yyyy-mm ...

  6. [hive小技巧]同一份数据多种处理

    其实就是from表时,可以插入到多个表. sql语句的模板如下: from history insert overwrite sales select * where actino='purchase ...

  7. Hive原理总结(完整版)

    目录 课程大纲(HIVE增强) 3 1. Hive基本概念 4 1.1 Hive简介 4 1.1.1 什么是Hive 4 1.1.2 为什么使用Hive 4 1.1.3 Hive的特点 4 1.2 H ...

  8. hadoop 数据倾斜

    数据倾斜是指,map /reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,这是因为某一个key的条数比其他key多很多(有 ...

  9. java 与大数据学习较好的网站

    C# C#中 Thread,Task,Async/Await,IAsyncResult 的那些事儿!https://www.cnblogs.com/doforfuture/p/6293926.html ...

随机推荐

  1. 全球首个全流程跨平台界面开发套件,PowerUI分析

    一.       首个全流程跨平台界面开发套件,PowerUI正式发布 UIPower在DirectUI的基础上,自主研发全球首个全流程跨平台界面开发套件PowerUI(PUI)正式发布,PowerU ...

  2. Git学习(三)——暂存区、远程仓库、增删改管理

    一.工作区和暂存区 工作区(Working Directory) 就是在你的电脑里能看到的目录 版本库(Repository) 工作区中的一个隐藏目录.git,这个不算工作区,而是Git版本库.Git ...

  3. matlab 连续读取多个文件

    方法1: 把文件的文件名按一定的规律命名,假如:filename1.txt,filename2.txt,...,fielname100.txt,在读取的时候则可以使用循环: for i = 1:100 ...

  4. Android获取时间2

    Android开发之获取系统12/24小时制的时间 时间 2014-08-19 08:13:22  CSDN博客 原文  http://blog.csdn.net/fengyuzhengfan/art ...

  5. NOT IN查询效率低,用它的等效写法提高效率。

    最近在处理大数据量导入的时候,使用OPENROWSET将Excel导入到临时表中之后,需要对数据进行唯一性验证.这时候发现使用NOT IN严重影响效率,一条sql可能执行10分钟甚至更久.尝试改变写法 ...

  6. jQuery Mobile 表单基础

    jQuery Mobile 会自动为 HTML 表单添加优异的便于触控的外观. jQuery Mobile 表单结构 jQuery Mobile 使用 CSS 来设置 HTML 表单元素的样式,以使其 ...

  7. Visual Studio 实现 编写一套.net代码,同时编译到 多个平台,多版本的操作笔记

    如题,把一套代码.NET代码.编译成多平台,多版本dll文件. 项目结构如图(Cvs文件读写开源组件 https://github.com/JoshClose/CsvHelper) 如上图.项目工程  ...

  8. export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH

    如题,临时修改程序运行时动态库的搜索路径,平时经常会用到,记录之!

  9. vs2010 A selected drive is no longer valid

    visual studio 2010重新安装添加组件,报A selected drive is no longer valid错误. 这个是由于已经安装了sp1,此时需要将sp1卸载掉,然后就可以安装 ...

  10. libxml2 移植 arm9

    准备工作: 1.libxml2软件版本:libxml2-2.6.32.tar.gz 2.交叉编译工具链:arm-none-linux-guneabi 软件安装: 1.设置环境变量: export PA ...