当前位置: 首页 > news >正文

Hive SQL / SQL

  • 1. 建表 & 拉取表
  • 2. 插入数据 insert + select
  • 3. 查询
    • 3.1 查询语句语法/顺序
    • 3.2 关系操作符
    • 3.3 聚合函数
    • 3.4 where
    • 3.5 分组聚合
    • 3.6 having 筛选分组后结果
    • 3.7 显式类型转换 & select产生指定值的列
  • 4. join 横向拼接
    • 4.1 等值连接 & 不等值连接
    • 4.2 两表连接
      • 4.2.1 内连接
      • 4.2.2 左外连接 & 右外连接
      • 4.2.3 满外连接
    • 4.3 多表连接
    • 4.4 笛卡尔积
  • 5. union 纵向拼接
  • 6. 排序
    • 6.1 order by 全局排序
    • 6.2 sort by reduce内部排序
  • 7. 其他
    • 7.1 select中判断筛选出null
      • 7.1.1 MYSQL ifnull
      • 7.1.2 Hive SQL if( , , )

1. 建表 & 拉取表

建表

create table student(name string, age  BIGINT,subject array<string>, -- 学科score map<string, float>, -- 学科对应成绩address struct<houseNumber: int, street: string>
) 
row format delimited
fields terminated by "\t"; -- 列间隔符

加载数据

-- local 从本地加载,省略则从HDFS加载
load data local inpath '/root/covid/2020-02.csv' into table covid2020;
-- 加载数据到分区
load data inpath '/data/covid/2020-02.csv' into table covid2020 partition(dt='2020-02');

2. 插入数据 insert + select

-- overwrite 覆盖
-- into 追加
insert overwrite/into table table1
select id,name
from table2;
-- 一次查询,插入多个表或分区
from table2
insert into/overwrite table table1 partition(dt="01")
select_value1
insert into/overwrite table table1 partition(dt="02")
select_value2
;

3. 查询

3.1 查询语句语法/顺序

注意先后顺序

select all/distinct expr1,expr2
from table_name
where condition -- 过滤
group by condition -- 分组查询
having condition -- 分组后组内过滤
order by col_list -- 最终查询结果排序
limit number
offset number
;

3.2 关系操作符

-- <==> 都为null或都不为null,返回true
where A <==> B -- 判空,必须用is (not) null
-- 若string类型为"",则hive的is null判断反回为False
where job is null-- in 集合
where job(col_name) in('研发', ‘销售’)

3.3 聚合函数

多行数据一起计算,返回一行值

count(*) 统计行数,包含null
count(col_name) 统计指定列的行数,不包含null
max() 不包含null
min()
sum()
avg()select count(*) from table1;

3.4 where

-- where 中可以使用函数
select * from table1 where length(name) > 5;
-- where中不能使用聚合函数

3.5 分组聚合

选择分组后,select字段只能选择 分组的字段(job)、聚合函数。

-- 分组后, 组内count(*)
select job,count(*)
from emp
group by job
;

3.6 having 筛选分组后结果

select job,count(*) cnt
from emp
group by job
having cnt >= 2;-- 相当于
select job,cnt
from 
(select job,count(*) cntfrom empgroup by job
) t
where cnt >= 2;

3.7 显式类型转换 & select产生指定值的列

select'none' as none_col1,cast('none' as int) as none_col2

显示类型转换
cast(‘100’ as int)
select cast(12.1 as int); >>> 12

4. join 横向拼接

4.1 等值连接 & 不等值连接

-- 等值连接
select *
from table1
join table2
on table1.id = table2.id
;-- 不等值连接
on 中不是"=", 早期版本hive 不支持不等值连接

4.2 两表连接

4.2.1 内连接

joininner join
两表连接字段的交集,不能join的行不显示。

select tb1.name,tb2.name
from table1 tb1
join / inner join table2 tb2
on tb1.id = tb2.id;

4.2.2 左外连接 & 右外连接

left joinleft outer join
保留左表所有数据,右表补空。
右外连接 相反。

select tb1.name,tb2.name
from table1 tb1
left/right join table2 tb2
on tb1.id = tb2.id;

4.2.3 满外连接

full joinfull outer join
保留两表左右,不能连接的字段补空。

select tb1.name,tb2.name
from table1 tb1
full join table2 tb2
on tb1.id = tb2.id;

4.3 多表连接

select*
from table1
join table2
on table1.id = table2.id
join table3
on table2.name = table3.name
(select id, namefrom stu_infowhere course_id = '01'
) t1
full outer join
(select id, namefrom stu_infowhere course_id = '02'
) t2
on t1.id = t2.id
full outer join
(select id, namefrom stu_infowhere course_id = '03'
) t3
-- 如果某id 不在t1中在t2中
-- 如果t1.id 为空则返回t2.id,如果不为空则返回t1.id
on nvl(t1.id, t2.id) = t3.id

4.4 笛卡尔积

select *
from table1
join table2-- 或
select *
from table1, table2

5. union 纵向拼接

  1. 两表上下拼接,对应字段的数量、类型都必须相同;
  2. 对应字段名不一样,能连接上;最终字段名以第一个表的字段名为准;
  3. union 连接的必须是select查询语句;
  4. 连接完后,当成一个select查询使用就行;
  5. union all 不会对相同数据去重,union会对上下两部分相同部分去重。
select *
from stu
where score = 30
union
select *
from stu
where score = 40
;

6. 排序

6.1 order by 全局排序

默认升序(asc), desc 降序descend
hive 最终执行reduce时,只能一个reduce以实现全局排序,数据量大时order by不合适;
可以使用order by + limit n ,每个Map取出n个,减少了reduce时的压力

select*
from table1
order by col_name desc
;

6.2 sort by reduce内部排序

保证每个reduce内有序,全局不保证有序。

-- 设置reduce个数
set mapreduce.job.reduces=3;
-- 查看reduce个数
set mapreduce.job.reduces;-- reduce内部排序
select*
from emp
sort by col_1 desc;

7. 其他

7.1 select中判断筛选出null

7.1.1 MYSQL ifnull

筛选出第二大的,但可能初筛排序后只有一个,再筛第二大为null
ifnull 指定为null时,替换为什么值。

selectifnull((selectsalaryfrom Employeeorder by salary desclimit 1offset 1),null) as No2_highest_salary

7.1.2 Hive SQL if( , , )

如果column是null,返回第二个值,不是则返回第三个值

if(column is null, 'IS NULL', 'IS NOT NULL')

相关文章:

Hive SQL / SQL

1. 建表 & 拉取表2. 插入数据 insert select3. 查询3.1 查询语句语法/顺序3.2 关系操作符3.3 聚合函数3.4 where3.5 分组聚合3.6 having 筛选分组后结果3.7 显式类型转换 & select产生指定值的列 4. join 横向拼接4.1 等值连接 & 不等值连接4.2 两表连接4.2.1 内连…...

程序媛的mac修炼手册--MacOS系统更新升级史

啊&#xff0c;我这个口罩三年从未感染过新冠的天选免疫王&#xff0c;却被支原体击倒&#x1f637;大意了&#xff0c;前几天去医院体检&#xff0c;刚检查完出医院就摘口罩了&#x1f926;大伙儿还是要注意戴口罩&#xff0c;保重身体啊&#xff01;身体欠恙&#xff0c;就闲…...

【数据库原理】(9)SQL简介

一.SQL 的发展历史 起源&#xff1a;SQL 起源于 1970 年代&#xff0c;由 IBM 的研究员 Edgar F. Codd 提出的关系模型概念演化而来。初期&#xff1a;Boyce 和 Chamberlin 在 IBM 开发了 SQUARE 语言的原型&#xff0c;后发展成为 SQL。这是为了更好地利用和管理关系数据库。…...

第二百五十二回

文章目录 概念介绍实现方法示例代码 我们在上一章回中介绍了如何在页面中添加图片相关的内容&#xff0c;本章回中将介绍如何给组件添加阴影.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在本章回中介绍的阴影类似影子&#xff0c;只是它不像影子那么明显&a…...

Leetcode 3701 · Find Nearest Right Node in Binary Tree (遍历和BFS好题)

3701 Find Nearest Right Node in Binary TreePRE Algorithms This topic is a pre-release topic. If you encounter any problems, please contact us via “Problem Correction”, and we will upgrade your account to VIP as a thank you. Description Given a binary t…...

网站被攻击了,接入CDN对比直接使用高防服务器有哪些优势

网站是互联网行业中经常被攻击的目标之一。攻击是许多站长最害怕遇到的情况。当用户访问一个网站&#xff0c;页面半天打不开&#xff0c;响应缓慢&#xff0c;或者直接打不开&#xff0c;多半是会直接走开&#xff0c;而不是等待继续等待相应。针对网站攻击的防护&#xff0c;…...

location常用属性和方法

目录 Location 对象 Location 对象属性 Location 对象方法 location.assign() location.replace() location.reload() Location 对象 Location 对象包含有关当前 URL 的信息。Location 对象是 Window 对象的一个部分&#xff0c;可通过 window.location 属性来访问。 L…...

二分图

目录 二分图 染色法判定二分图 匈牙利算法 二分图 二分图&#xff0c;又叫二部图&#xff0c;将所有点分成两个集合&#xff0c;使得所有边只出现在集合之间的点之间&#xff0c;而集合内部的点之间没有边。二分图当且仅当图中没有奇数环。只要图中环的边数没奇数个数的&am…...

[VUE]3-路由

目录 路由 Vue-Router1、Vue-Router 介绍2、路由配置3、嵌套路由3.1、简介3.2、实现步骤3.3、⭐注意事项 4、⭐router-view标签详解 ​&#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅…...

Kafka(六)消费者

目录 Kafka消费者1 配置消费者bootstrap.serversgroup.idkey.deserializervalue.deserializergroup.instance.idfetch.min.bytes1fetch.max.wait.msfetch.max.bytes57671680 (55 mebibytes)max.poll.record500max.partition.fetch.bytessession.timeout.ms45000 (45 seconds)he…...

RK3399平台入门到精通系列讲解(实验篇)共享工作队列的使用

🚀返回总目录 文章目录 一、工作队列相关接口函数1.1、初始化函数1.2、调度/取消调度工作队列函数二、信号驱动 IO 实验源码2.1、Makefile2.2、驱动部分代码工作队列是实现中断下半部分的机制之一,是一种用于管理任务的数据结构或机制。它通常用于多线程,多进程或分布式系统…...

STM32 基于 MPU6050 的飞行器姿态控制设计与实现

基于STM32的MPU6050姿态控制设计是无人机、飞行器等飞行器件开发中的核心技术之一。在本文中&#xff0c;我们将介绍如何利用STM32和MPU6050实现飞行器的姿态控制&#xff0c;并提供相应的代码示例。 1. 硬件连接及库配置 首先&#xff0c;我们需要将MPU6050连接到STM32微控制…...

大数据平台Bug Bash大扫除最佳实践

一、背景 随着越来越多的"新人"在日常工作以及大促备战中担当大任&#xff0c;我们发现仅了解自身系统业务已不能满足日常系统开发运维需求。为此&#xff0c;大数据平台部门组织了一次Bug Bash活动&#xff0c;既能提升自己对兄弟产品的理解和使用&#xff0c;又能…...

JavaScript 中的数组过滤

在构建动态和交互式程序时&#xff0c;您可能需要添加一些交互式功能。例如&#xff0c;用户单击按钮以筛选一长串项目。 您可能还需要处理大量数据&#xff0c;以仅返回与指定条件匹配的项目。 在本文中&#xff0c;您将学习如何使用两种主要方法在 JavaScript 中过滤数组。…...

随机森林(Random Forest)

随机森林&#xff08;Random Forest&#xff09;是一种集成学习方法&#xff0c;通过组合多个决策树来提高模型的性能和鲁棒性。随机森林在每个决策树的训练过程中引入了随机性&#xff0c;包括对样本和特征的随机选择&#xff0c;以提高模型的泛化能力。以下是随机森林的基本原…...

本地引入Element UI后导致图标显示异常

引入方式 npm 安装 推荐使用 npm 的方式安装&#xff0c;它能更好地和 webpack 打包工具配合使用。 npm i element-ui -SCDN 目前可以通过 unpkg.com/element-ui 获取到最新版本的资源&#xff0c;在页面上引入 js 和 css 文件即可开始使用。 <!-- 引入样式 --> <…...

UE5.1_UMG序列帧动画制作

UE5.1_UMG序列帧动画制作 UMG序列帧动画制作相对比较简单&#xff0c;不像视频帧需要创建媒体播放器那么复杂&#xff0c;以下简要说明&#xff1a; 1. 事件函数 2. 准备序列帧装入数组 3. 构造调用事件函数 4. 预览 序列帧UMG0105 5. 完成&#xff01;按需配置即可。...

总结HarmonyOS的技术特点

HarmonyOS是华为自主研发的面向全场景的分布式操作系统。它的技术特点主要体现在以下几个方面&#xff1a; 分布式架构&#xff1a;HarmonyOS采用了分布式架构设计&#xff0c;通过组件化和小型化等方法&#xff0c;支持多种终端设备按需弹性部署&#xff0c;能够适配不同类别的…...

从0到1入门C++编程——04 类和对象之封装、构造函数、析构函数、this指针、友元

文章目录 一、封装二、项目文件拆分三、构造函数和析构函数1.构造函数的分类及调用2.拷贝函数调用时机3.构造函数调用规则4.深拷贝与浅拷贝5.初始化列表6.类对象作为类成员7.静态成员 四、C对象模型和this指针1.类的对象大小计算2.this指针3.空指针访问成员函数4.const修饰成员…...

Robot Operating System 2: Design, Architecture, and Uses In The Wild

Robot Operating System 2: Design, Architecture, and Uses In The Wild (机器人操作系统 2&#xff1a;设计、架构和实际应用) 摘要&#xff1a;随着机器人在广泛的商业用例中的部署&#xff0c;机器人革命的下一章正在顺利进行。即使在无数的应用程序和环境中&#xff0c;也…...

TinyEngine 服务端正式开源啦!!!

背景介绍 TinyEngine 低代码引擎介绍 随着企业对于低代码开发平台的需求日益增长&#xff0c;急需一个通用的解决方案来满足各种低代码平台的开发需求。正是在这种情况下&#xff0c;低代码引擎应运而生。它是一种通用的开发框架&#xff0c;通过对低代码平台系统常用的功能进…...

网页设计与制作web前端设计html+css+js成品。电脑网站制作代开发。vscodeDrea 【企业公司宣传网站(HTML静态网页项目实战)附源码】

网页设计与制作web前端设计htmlcssjs成品。电脑网站制作代开发。vscodeDrea 【企业公司宣传网站&#xff08;HTML静态网页项目实战&#xff09;附源码】 https://www.bilibili.com/video/BV1Hp4y1o7RY/?share_sourcecopy_web&vd_sourced43766e8ddfffd1f1a1165a3e72d7605...

Avalonia学习(二十)-登录界面演示

今天开始继续Avalonia练习。 本节&#xff1a;演示实现登录界面 在网上看见一个博客&#xff0c;展示Avalonia实现&#xff0c;仿照GGTalk&#xff0c;我实现了一下&#xff0c;感觉是可以的。将测试的数据代码效果写下来。主要是样式使用&#xff0c;图片加载方式。 只有前…...

Spring依赖注入的魔法:深入DI的实现原理【beans 五】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Spring依赖注入的魔法&#xff1a;深入DI的实现原理【beans 五】 前言DI的基本概念基本概念&#xff1a;为什么使用依赖注入&#xff1a; 构造器注入构造器注入的基本概念&#xff1a;示例&#xff1a…...

【学习笔记】1、数字逻辑概论

1.1 数字信号 数字信号&#xff0c;在时间和数值上均是离散的。数字信号的表达方式&#xff1a;二值数字逻辑和逻辑电平描述的数字波形。 &#xff08;1&#xff09; 数字波形的两种类型 数值信号又称为“二值信号”。数字波形又称为“二值位形图”。 什么是一拍 一定的时…...

设置代理IP地址对网络有什么影响?爬虫代理IP主要有哪些作用?

在互联网的广泛应用下&#xff0c;代理IP地址成为了一种常见的网络技术。代理IP地址可以改变用户的上网行为&#xff0c;进而影响网络访问的速度和安全性。本篇文章将探讨设置代理IP地址对网络的影响&#xff0c;以及爬虫代理IP的主要作用。 首先&#xff0c;让我们来了解一下代…...

聊聊jvm的mapped buffer的统计

序 本文主要研究一下jvm的mapped buffer的统计 示例 private void writeDirectBuffer() {// 分配一个256MB的直接缓冲区ByteBuffer buffer ByteBuffer.allocateDirect(256 * 1024 * 1024);// 填充数据Random random new Random();while (buffer.remaining() > 4) {buff…...

matrix-breakout-2-morpheus 靶场 练习思路

arp-scan -l 获取目标机器的IP nmap -sV -A IP 查看目标机器开放的端口 gobuster dir -u http://192.168.29.130 -x php,txt,jsp,asp -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt 爆破目标机器的文件目录,找到可以访问的文件路径 http://192.168…...

【Flutter 开发实战】Dart 基础篇:从了解背景开始

想要学会用 Flutter 开发 App&#xff0c;就不可避免的要学习另一门很有意思的编程语言 —— Dart。很多小伙伴可能在学习 Flutter 之前可能都没听说过这门编程语言&#xff0c;我也是一样&#xff0c;还以为 Dart 是为了 Flutter 而诞生的&#xff1b;然而&#xff0c;当我们去…...

西电期末1017.有序序列插值

一.题目 二.分析与思路 简单题。主要考察简单的排序&#xff0c;最后的插入数据同样不用具体实现&#xff0c;只需在输出时多输出一下即可&#xff0c;注意顺序&#xff01;&#xff01; 三.代码实现 #include<bits/stdc.h>//万能头 int main() {int n;scanf("%d…...