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.不等值的链接操作

最新文章

  1. 2DToolkit官方文档中文版打地鼠教程(三):Sprite Collections 精灵集合
  2. C(++) Websocket实现扫码二维码登录---GoEasy
  3. .net学习笔记---HttpResponse类
  4. ThinkPHP跳转与重定向的区别在哪里
  5. Linux-remote change password (more)
  6. 界面上传文件js包【AjaxUpload.js】
  7. 05_android入门_GET方式实现登陆(在控件上显示服务端返回的内容)
  8. IIS 之 HTTP Error 404.2 – Not Found(ISAPI 和 CGI 限制)
  9. PAT-乙级-1002. 写出这个数 (20)
  10. Entity Framework 学习笔记(2)
  11. Apache CXF 例子
  12. IP工具类——IpAddress.java
  13. Android绘制流程
  14. 微信支付:redirect_uri参数错误 的解决办法
  15. 使用DataReader读取数据
  16. 根据用户的ID查用户的名字
  17. D14
  18. 前端测试框架Jest系列教程 -- Matchers(匹配器)
  19. Unhandled event loop exception No more handles
  20. android studio签名

热门文章

  1. Appium移动自动化测试之Java篇
  2. myeclipse部署web项目到server : deploy location 为 INVALID,并且不能更改
  3. winAPI 检查系统设备拔插使用 WM_DEVICECHANGE 消息
  4. JsonString,字典,模型之间相互转换
  5. 关于representation的理解
  6. PHP获取具有相同name的多个input表单信息
  7. Java线程池入门
  8. CSS布局(一)
  9. discuz二次开发,分析和实现 之 向dz数据库插入自己的帖子吧
  10. cmd运行的程序的工作目录