关闭

hive使用技巧(二)——共享中间结果集

标签: mapreducehiveIO
1411人阅读 评论(0) 收藏 举报
分类:

相关文章推荐:

hive使用技巧(一)自动化动态分配表分区及修改hive表字段名称
hive使用技巧(二)——共享中间结果集
hive使用技巧(三)——巧用group by实现去重统计

hive使用技巧(四)——巧用MapJoin解决数据倾斜问题

Hive使用技巧(五)—— 一行转多行,多行转一行



hive使用技巧(二)——共享中间结果集,很多hive的Job用到的中间结果集 ,存在“亲缘”关系,多作业用共用输入或输出。


1、优化前的SQL

SELECT
    COUNT(*) pv
FROM
    (
        SELECT
            cookieid,
            userid,
            to_date(DATETIME) day1
        FROM
            ods.tracklog_5min
        WHERE
            DAY>='20151001'
        AND DAY<='20151031'
        AND lower(requesturl) IN ('http://chat.hexun.com/',
                                  'http://zhibo.hexun.com/'))t1 

INNER JOIN
    (
        SELECT
            cookieid,
            to_date(DATETIME) day2
        FROM
            ods.tracklog_5min
        WHERE
            DAY>='20151001'
        AND DAY<='20151031'
        AND ((
                    lower(requesturl) LIKE 'http://zhibo.hexun.com/%'
                OR  lower(requesturl) LIKE 'http://chat.hexun.com/%')
            AND requesturl LIKE '%/default.html%'))t2
ON
    t1.cookieid=t2.cookieid
AND t1.day1=t2.day2
INNER JOIN
    (
        SELECT
            cookieid,
            to_date(DATETIME) day3
        FROM
            ods.tracklog_5min
        WHERE
            DAY>='20151001'
        AND DAY<='20151031'
        AND ( (
                    lower(requesturl) LIKE 'http://px.hexun.com/%'
                AND lower(requesturl) LIKE '%/default.html%' )
            OR  (
                    lower(requesturl) LIKE 'http://px.hexun.com/pack/%'
                AND lower(requesturl) LIKE '%.html%' )
            OR  (
                    lower(requesturl) LIKE 'http://px.hexun.com/p/%'
                AND lower(requesturl) LIKE '%.html%' ) ))t3
ON
    t1.cookieid=t3.cookieid
AND t1.day1=t3.day3
LEFT JOIN
    stage.saleplatform_productvisitdetail_temp t4
ON
    t1.userid=t4.userid
WHERE
    t4.createtime>t1.day1
OR  t4.userid IS NULL;

可以看,上面的SQL针对同一源表的数据查询了三次,浪费了系统的资源,相同的源完全可以通用。


2、优化后的SQL

抽出公共数据

create table default.tracklog_10month as   
select * from  ods.tracklog_5min
WHERE  DAY>='20151001' AND DAY<='20151031';


利用临时表,替换原SQL的公共部分:

SELECT
    COUNT(*) pv
FROM
    (
        SELECT
            cookieid,
            userid,
            to_date(DATETIME) day1
        FROM
            default.tracklog_10month 
        WHERE
             lower(requesturl) IN ('http://chat.hexun.com/',
                                  'http://zhibo.hexun.com/'))t1 

INNER JOIN
    (
       SELECT
            cookieid,
            to_date(DATETIME) day2
        FROM
            default.tracklog_10month 
        WHERE  (lower(requesturl) LIKE 'http://zhibo.hexun.com/%'
                OR  lower(requesturl) LIKE 'http://chat.hexun.com/%')
            AND requesturl LIKE '%/default.html%')t2
ON
    t1.cookieid=t2.cookieid
AND t1.day1=t2.day2
INNER JOIN
    (
        SELECT
            cookieid,
            to_date(DATETIME) day3
        FROM
            default.tracklog_10month
        WHERE        
        ( (
                    lower(requesturl) LIKE 'http://px.hexun.com/%'
                AND lower(requesturl) LIKE '%/default.html%' )
            OR  (
                    lower(requesturl) LIKE 'http://px.hexun.com/pack/%'
                AND lower(requesturl) LIKE '%.html%' )
            OR  (
                    lower(requesturl) LIKE 'http://px.hexun.com/p/%'
                AND lower(requesturl) LIKE '%.html%' ) ))t3
ON
    t1.cookieid=t3.cookieid
AND t1.day1=t3.day3
LEFT JOIN
    stage.saleplatform_productvisitdetail_temp t4
ON
    t1.userid=t4.userid
WHERE
    t4.createtime>t1.day1
OR  t4.userid IS NULL;

3、共享中间结果集

本质就是降IO,减少MR阶段中大量读写磁盘及网络IO的压力。




2
0
查看评论

几种保存Hive查询结果的方法

很多时候,我们需要将Hive的查询结果
  • zhuce1986
  • zhuce1986
  • 2014-09-29 13:34
  • 8735

hive结果及中间结果压缩

转自: hadoop中常见的压缩格式及特性如下: 压缩格式 工具 算法 文件扩展名 多文件 可分割性 DEFLATE* 无 DEFLATE .deflate 不 不 Gzip gzip DEFLATE .gz 不...
  • slx_2011
  • slx_2011
  • 2014-04-18 13:43
  • 1249

Hive 常用方法

1.字符串长度函数:length语法: length(string A)返回值: int说明:返回字符串A的长度举例:hive> select length(‘abcedfg’) from lxw_dual;7 2. 字符串反转函数:reverse语法: reverse(string A)返...
  • u010453150
  • u010453150
  • 2017-01-23 10:28
  • 597

hive共享中间结果集

场景:如果有多个作业同时用到了相同的中间结果集 重量级优化:作业的“亲缘”关系(也就是有相同依赖的表,就是from后面相同的), 目的是:多作业共用输入或输出,输入就是用中间结果集作为下一阶段的输入,输出和输入是同一个概念,就是说你输出了,又作为下一个中间结果集的输入 比如说,每天几千个作业访...
  • zengxiaosen
  • zengxiaosen
  • 2016-09-27 10:09
  • 338

hive两个聚合函数的计算结果拼接成表并做进一步计算

hive两个聚合函数的计算结果拼接成表让LZ头疼了很久,一度想到用python处理,或者新建两张临时表保存聚合函数的结果然后再取出数据进行计算,或者使用UDF, 但总觉得还有其他方法。经过一番探索,发现WITH AS 可以方便快捷解决此问题。 WITH AS短语,也叫做子查询部分(subquery...
  • zqqnancy
  • zqqnancy
  • 2016-09-27 14:51
  • 1804

几种保存Hive查询结果的方法

当然我们也可以查询保存到某个文件file.sql中,按下面的方式执行查询,并保存结果 $ hive -f file.sql > /tmp/out.txt    下面是file.sql的内容: ...
  • u010159842
  • u010159842
  • 2017-04-16 09:12
  • 2317

[Hive]求两个集合的减集

HIVE求两个集合的减集
  • yeweiouyang
  • yeweiouyang
  • 2015-01-13 14:10
  • 4726

怎么让两个div并排同行显示

转:http://www.myexception.cn/web/1943020.html 如何让两个div并排同行显示 前段时间在做界面的时候,想要实现个两个DIV并排的界面,做之前想着挺简单的,只要将一个div浮动就可以了。然后就测试了一下。下面是部分代码 自己测试 代码 ...
  • pzasdq
  • pzasdq
  • 2017-01-18 23:20
  • 417

几种大数据框架的对比

hadoop(批量,离线,非实时) 主要用于搜索引擎,文件存储等等,  Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(hi...
  • vessalasd1
  • vessalasd1
  • 2016-01-06 22:08
  • 2098

记录一下Hive中间和最终结果压缩

中间Lzo,最终Gzip   Java代码   set mapred.output.compress = true;   set mapred.output.compressio...
  • qiaochao911
  • qiaochao911
  • 2013-04-26 15:08
  • 902
    个人资料
    • 访问:436511次
    • 积分:6665
    • 等级:
    • 排名:第4254名
    • 原创:224篇
    • 转载:27篇
    • 译文:0篇
    • 评论:65条
    文章分类
    博客专栏
    最新评论