Hive的join操作

假设有三张表,结构和数据如下:
-- 创建表 test_a,test_b,test_c
CREATE TABLE test_a(
id int,
name string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';--分别导入数据到三个表中
--test_a
1   a1
2   a2
4   a4
--test_b
1   b1
3   b3
4   b4
--test_c
1   c1
4   c4
5   c5
hive只支持等值连接;
不支持非等值的join条件(可以通过其他方式实现,如left outer join),
因为它很难在mapreduce job实现这样的条件.

inner join

-- 内连接,显示两表匹配上的结果.
-- inner join 可以简写为 join
select * from test_a a inner join test_b b on a.id=b.id;

left join

在这里插入图片描述

-- 左外连接,左表数据全显示,右表数据匹配上的显示,未匹配上的显示NULL.
--left join是left outer join的简写
select a.*,b.* from test_a a left join test_b b on a.id=b.id;

right join

在这里插入图片描述

-- 右外连接,右表数据全显示,左表数据匹配上的显示,未匹配上的显示NULL.  
--right join是right outer join的简写
select a.*,b.* from test_a a right join test_b b on a.id=b.id;

full join

在这里插入图片描述

全外连接,相当于left join union right join,包括两个表的join结果(左边有,右边NULL union 右边有,左边NULL)  
-- full join是full outer join的简写
select a.*,b.* from test_a a full outer join test_b b on a.id=b.id;

join的应用

求id相同的所有用户

-- 求出三表中id相同的数据
select a.*,b.name,c.name 
from test_a a 
inner join 
test_b b on a.id=b.id 
inner join 
test_c c on b.id=c.id;

计算新增用户

--思路:
--1.使用右连接列出右表的所有数据; 
--2.通过左表的aid is null筛选除左表也就是以前不存在的数据; 
--3.通过count(1)计算出右表有而左表没有的数据总和(即新增用户数).select count(1) from
(select aid from user_install_status where dt='20141117' group by aid) a
right join
(select aid from user_install_status where dt='20141228' group by aid) b
on b.aid=a.aid where a.aid is null;

笛卡尔积

--笛卡尔积的SQL,是需要避免的查询操作.
select * from test_a inner join test_b;

自连接

-- 顾名思义,就是一张表自己连接自己;
--假设有表ods_self,只有一个字段a【string类型】,数据如下:
2
3
4
--需求:将ods_self表中a字段的值小于等于当前行的值拼接起来,最终得到的结果展示如下:
a b 
3 23 
2 2 
4 234
--解题思路:由于给定的条件就只有ods_self这一张表,所以要想得到结果中一张表有两个字段的效果,就需要ods_self表进行自连接
--第一步:自连接(也可以说是笛卡尔积,cross join 或者 join 不带 on 条件),并且对自连接之后的结果过滤(获取小于等于当前a值的数据)
create table dwd_self as 
select 
m.a as a,
n.a as b
from 
ods_self m
cross join 
ods_self n
where m.a>=n.a;
--第二步:将数据拼接成想要的结果
select
a, 
concat_ws('、',collect_list(b)) as nb
from dwd_self
group by a; 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/11928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PyTorch】torch.backends.cudnn.benchmark 和 torch.backends.cudnn.deterministic

1. torch.backends.cudnn.benchmark 在 PyTorch 中,torch.backends.cudnn.benchmark 是一个配置选项,用于在运行时自动选择最优的卷积算法,以提高计算效率。这个设置特别针对使用 CUDA 和 cuDNN 库进行的运算,并在使用具有变化输…

【Vue探索之旅】初识Vue

文章目录 前言 渐进式框架​ 入门案例 完结撒花 前言 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手&#x…

XWiki 服务没有正确部署在tomcat中,如何尝试手动重新部署?

1. 停止 Tomcat 服务 首先,您需要停止正在运行的 Tomcat 服务器,以确保在操作文件时不会发生冲突或数据损坏: sudo systemctl stop tomcat2. 清空 webapps 下的 xwiki 目录和 work 目录中相关的缓存 删除 webapps 下的 xwiki 目录和 work …

【实践】给proto的message添加自定义tag

背景 通常来说, 使用proto定义message的Field是使用下划线,比如: # proto定义 message Req {string key_name 1; }# 生成的.pb.go 中req的定义type Req struct {state protoimpl.MessageStatesizeCache protoimpl.SizeCacheun…

angular13 自定义组件全项目都可用 自存

1.定义自定义组件 使用命令创建一个组件 但删除它在你的module里的声明,因为会报错只能引用一次 在本组件中创建一个module文件,引入刚才的组件component.ts import { NgModule } from angular/core; import { CommonModule } from angular/common; im…

[ES] ElasticSearch节点加入集群失败经历分析主节点选举、ES网络配置 [publish_address不是当前机器ip]

背景 三台CentOS 7.6.1虚拟机, 每台虚拟机上启动一个ElasticSearch 7.17.3(下面简称ES)实例 即每台虚拟机上一个ES进程(每台虚拟机上一个ES节点) 情况是: 之前集群是搭建成功的, 但是今天有一个节点一…

【运维实践项目|004】:企业网络性能优化升级项目

目录 项目名称 项目背景 项目目标 项目成果 我的角色与职责 我主要完成的工作内容 本次项目涉及的技术 本次项目遇到的问题与解决方法 本次项目中可能被面试官问到的问题及答案 问题1:你是如何分析网络瓶颈的? 问题2:你是如何实施网…

PHP超级全局变量 | 全栈: [表单post提交数据(姓名,密码,文件)]

超级全局变量 特点:预定义变量无需创建 作用:用于存储来自执行环境的特殊信息,如HTTP请求数据、服务器信息、会话数据 常见类别 $_GET 用于收集表单数据,当表单的method为get时,数据会通过URL传递。例如&#xff0c…

函数编辑器调研及设计开发

前言:在产品研发中需要一款可嵌入web开发的代码及函数编辑器,本文从功能,扩展,外观/交互,维护/社区,兼容性,开源与否等方面考虑,进行对比筛选 1、编辑器统计数据 市面上编辑器有很…

Windows电脑使用Docker安装AList网盘神器并配置公网地址打造私人云存储空间

文章目录 前言1. 使用Docker本地部署Alist1.1 本地部署 Alist1.2 访问并设置Alist1.3 在管理界面添加存储 2. 安装cpolar内网穿透3. 固定Alist公网地址 前言 本文和大家分享如何在Windows系统使用Docker本地部署Alist全平台网盘神器,然后结合cpolar内网穿透工具实现…

全面解析:分布式光伏系统的概念、优缺点和应用

光伏发电领域中,分布式和集中式光伏是两种主要应用模式。集中式电站占地面积大,受国家土地政策制约严重,且我国土地资源又相当紧缺,而分布式光伏电站因接网便利、场地灵活等特点,近年来发展迅速,越来越多的…

P3853 [TJOI2007] 路标设置

题目描述: 题目背景 B 市和 T 市之间有一条长长的高速公路,这条公路的某些地方设有路标,但是大家都感觉路标设得太少了,相邻两个路标之间往往隔着相当长的一段距离。为了便于研究这个问题,我们把公路上相邻路标的最大距离定义为…

Linux sigfillset

#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <signal.h> /* * 是标准C库中用于操作自定义信号集的一个函数 */ #if 0 # 用于初始化一个自定义信号集&#xff0c;将其所有信号都填充满&#xff0c;也就是将信号集中的所…

Windows安装多版本MySQL

5.7 - 配置 my.ini [client] port 3307[mysql] default-character-set utf8mb4[mysqld] port 3307 server_id 1 character-set-server utf8mb4basedir "E://MySQL/mysql5.7" datadir "E://MySQL/mysql5.7/data"# 将所有表名转换为小写字母 lower_c…

食品安全群众满意度的概念

本文由群狼调研&#xff08;湖南酒店神秘顾客&#xff09;出品&#xff0c;欢迎转载&#xff0c;请注明出处。食品安全群众满意度是指一国或地区居民对其所消费的食品安全状况的整体满意程度。食品安全群众满意度调查通常是通过对一定数量的居民进行问卷调查或采访&#xff0c;…

USE INDEX/FORCE INDEX/IGNORE INDEX使用的好,sql查询速度提升一倍

前言 在实际工作中有些时候数据库的执行就很奇怪&#xff0c;要么不用索引&#xff0c;要么用了错误的索引&#xff0c;那么在这种情况下你就可以考虑使用这些索引提示来纠正数据库的行为。 早期我们有一个表结构定义&#xff0c;上面有 A、B 两个索引。原本按照预期&#x…

美易官方:GPT-4o重磅演示后奥特曼发声

GPT-4的震撼演示犹如一道璀璨的星光&#xff0c;划破天际&#xff0c;照亮了科技领域的每一个角落。在这光芒四射的时刻&#xff0c;奥特曼&#xff0c;这位科技领域的先驱者&#xff0c;也忍不住发声&#xff0c;为我们描绘了一个激动人心的未来画卷。 虽然并未在OpenAI周一的…

RabbitMQ 面试题(三)

1. 简述RabbitMQ的Simple模式 &#xff1f; RabbitMQ的Simple模式是消息队列的基础模式&#xff0c;由一个生产者、一个队列和一个消费者组成。在这个模式下&#xff0c;生产者通过默认交换器将消息发送到队列中&#xff0c;而消费者则从该队列中取出消息进行处理。 Simple模…

SCQA表达模型:让你的表达更具吸引力(2)

一、引言 站在巨人的肩膀上&#xff0c;思维模型是前人智慧结晶&#xff0c;当我们面对相似挑战时&#xff0c;借鉴与模仿这些模型&#xff0c;往往能为我们带来意想不到的结果。 在信息爆炸的时代&#xff0c;如何高效、准确地传达信息成为了人们关注的焦点。SCQA表达模型作为…

网络网络层之(5)IPv6协议

网络网络层之(5)IPv6协议 Author: Once Day Date: 2024年5月12日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day…