需求

一个重点店铺表:dim_shop_point
一个用户对店铺关注表:follow_shop
一个近一年用户对店铺订单表:order_shop_year
全量店铺中有重点店铺和其他店铺
实现重点店铺的近一年订单数据及全量关注人群 + 非重点店铺关注人与近一年用户店铺订单的交集。

方案

方案一:

使用订单表order_shop_year ,FULL JOIN上重点店铺的全量关注人群,再LEFT JOIN上非重点店铺的关注人群。
SQL:

select id,shop_id,is_follow,t1.order_info
from order_shop_year t1
full join
(select id,shop,is_followfrom follow_shop a inner join dim_shop_point b on a.shop=b.shop
) t2
on t1.id=t2.id and t1.shop=t2.shop
left join
(select id,shop,is_followfrom follow_shop a left join dim_shop_point b on a.shop=b.shopwhere b.shop is null
) t3
on t1.id=t3.id and t1.shop=t3.shop

此时发现follow_shop表和dim_shop_point 表都被读取了两次,而且job数是5。
有没有job数更少,表读取次数更少的方式呢。

方案二:

给关注店铺用户打上标记,重点店铺标记1,非重点店铺标记0。最后订单表FULLJOIN关注人群,
此时有一下情况:

  1. 如果左右都匹配,标记设为1(不管是否是重点店铺)
  2. 如果左表有数,右表为null,表示这个人购买但是没关注,也保留,标记设为1
  3. 如果左表为null,右表有数,表示此人未购买但关注,此时判断此店铺是否为重点店铺,直接保留提前打上的标识数字即可。
    最终结果过滤掉标记0的数据就是结果数据。
    SQL:
select id,shop_id,is_follow,t1.order_info
from order_shop_year t1
full join
(select id,shop,is_follow,if(b.shop is null,0,1) as flagfrom follow_shop a left join dim_shop_point b on a.shop=b.shop
) t2
on t1.id=t2.id and t1.shop=t2.shop
where if(t1.id is null,t2.flag,1) = 1

这样所有表都是读取了一次,而且job也减少到3个。

hive FULLJOIN中实现部分数据FULLJOIN另一部分数据LEFTJOIN的结果相关推荐

  1. 将DataFrame数据如何写入到Hive表中

    1.将DataFrame数据如何写入到Hive表中? 2.通过那个API实现创建spark临时表? 3.如何将DataFrame数据写入hive指定数据表的分区中? 从spark1.2 到spark1 ...

  2. spark抽取mysql数据到hive_使用spark将内存中的数据写入到hive表中

    使用spark将内存中的数据写入到hive表中 hive-site.xml hive.metastore.uris thrift://master:9083 Thrift URI for the re ...

  3. hive 导入hdfs数据_将数据加载或导入运行在基于HDFS的数据湖之上的Hive表中的另一种方法。

    hive 导入hdfs数据 Preceding pen down the article, might want to stretch out appreciation to all the well ...

  4. hive sqoop 分区导入_利用oozie,执行sqoop action将DB2中的数据导入到hive分区表中

    测试:利用oozie,执行sqoop action将DB2中的数据导入到hive分区表中. 需要注意的地方: 1,要添加hive.metastore.uris这个参数.否则无法将数据加载到hive表中 ...

  5. 往hive表中插入与导出数据方式load ,insert ,sqoop 等方式详解

    往hive数据仓库的表中导入数据,可以直接insert ,也可以选择load方式.当然也可以通过第三方工具如sqoop等将数据导入到hive当初.特别注意:hive虽然不会验证用户装载的数据和表的模式 ...

  6. 存在的hive插入数据_往hive表中插入数据以及导出数据

    转载:https://blog.csdn.net/qq_26442553/article/details/80380590 转载:https://blog.csdn.net/weixin_436817 ...

  7. hive表中的数据导出

    将hive表中的数据导出到其他任意目录,例如linux本地磁盘,例如hdfs,例如mysql等等 一.insert导出 将查询的结果导出到本地 insert overwrite local direc ...

  8. hive表中的数据导出:表数据的导出7种方式

    将hive表中的数据导出到其他任意目录,例如linux本地磁盘,例如hdfs,例如mysql等等 insert导出 1)将查询的结果导出到本地 :第一种 insert overwrite local ...

  9. 利用SparkSQL(java版)将离线数据或实时流数据写入hive的用法及坑点

    1. 通常利用SparkSQL将离线或实时流数据的SparkRDD数据写入Hive,一般有两种方法.第一种是利用org.apache.spark.sql.types.StructType和org.ap ...

  10. hive优化之------控制hive任务中的map数和reduce数

    一.    控制hive任务中的map数: 1.    通常情况下,作业会通过input的目录产生一个或者多个map任务. 主要的决定因素有: input的文件总个数,input的文件大小,集群设置的 ...

最新文章

  1. IPV6的设置问题!
  2. shell中大于、等于、小于
  3. PHP下的Oauth2.0尝试 - 授权码授权(Authorization Code Grant)
  4. Hive学习之路 (九)Hive的内置函数
  5. 4.10 风格代价函数-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  6. 计算机视觉与深度学习 | 机器学习中的数学——入门机器学习
  7. 【BZOJ - 3450】Tyvj1952 Easy(数学期望,期望的线性性)
  8. 我对骨骼动画的理解(最精减的骨骼动画类)
  9. bzoj 1049: [HAOI2006]数字序列(DP+DP)
  10. layey图片内容不居中
  11. python数据类型二(列表和元组)
  12. Oracle的expdp导出、impdp导出命令
  13. 使用yolo v3训练自己的模型
  14. 【爬虫】花瓣采集下载器
  15. 小程序分销商城源码系统+搭建教程+前后端完整版
  16. 原子结构示意图全部_所有原子结构示意图 号 元素周期表
  17. 如何提高测试工作效率
  18. 免费公开课:讲解DevExpress 2016.2新版本功能
  19. 考研英语(四)——名词性从句
  20. exit()和return的含义及区别

热门文章

  1. Python3爬虫项目集:爬取知乎十几万张小姐姐美图
  2. c#学习笔记05-treeview中添加图标
  3. KISS,新Blog
  4. 目前金融理财直播有哪些分类?怎么做?
  5. 什么是Cookie?有哪些类型?如何创建、读取和删除?
  6. 2022年12月国内外数据库排名
  7. First Happy Work :)
  8. php樱花许愿树代码_怪事笔记
  9. 卫龙上市酿成资本惨剧:CPE损失上亿美元 高瓴浮亏5000万美元
  10. Vue学习-基础篇7