Hive SQL DML

news2024/11/27 2:29:27

Hive SQL DML

本节所需数据集

数据集 提取码:rkun

⛵加载数据

Load

  • 加载,装载
  • 将数据文件移动到与Hive表对应位置,移动时是纯复制,移动操作。
  • 纯复制移动指数据load加载到表中,hive不会对表中数据内容进行任何变换,任何操作
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename;

本地文件系统LOCAL指的是Hiveserver2服务所在机器的本地Linux文件系统,不是Hive客户端所在的本地文件系统。

首先准备数据

students.txt

95001,李勇,男,20,CS
95002,刘晨,女,19,IS
95003,王敏,女,22,MA
95004,张立,男,19,IS
95005,刘刚,男,18,MA
95006,孙庆,男,23,CS
95007,易思玲,女,19,MA
95008,李娜,女,18,CS
95009,梦圆圆,女,18,MA
95010,孔小涛,男,19,CS
95011,包小柏,男,18,MA
95012,孙花,女,20,CS
95013,冯伟,男,21,CS
95014,王小丽,女,19,CS
95015,王君,男,18,MA
95016,钱国,男,21,MA
95017,王风娟,女,18,IS
95018,王一,女,19,IS
95019,邢小丽,女,19,IS
95020,赵钱,男,21,IS
95021,周二,男,17,MA
95022,郑明,男,20,MA

Hiveserver2服务所在机器的本地Linux上传数据

[root@node1 ~]# cd hivedata/
[root@node1 hivedata]# ls
archer.txt  students.txt  team_ace_player.txt

[root@node1 hivedata]# pwd
/root/hivedata

在db1下创建两张表


--建表student_local 用于演示从本地加载数据
create table student_local(num int,name string,sex string,age int,dept string) row format delimited fields terminated by ',';
--建表student_HDFS  用于演示从HDFS加载数据
create table student_HDFS(num int,name string,sex string,age int,dept string) row format delimited fields terminated by ',';

-- 从本地加载数据  数据位于HS2(node1)本地文件系统  本质是hadoop fs -put上传操作
LOAD DATA LOCAL INPATH '/root/hivedata/students.txt' INTO TABLE student_local;

在这里插入图片描述

将数据上传到hdfs根目录下

[root@node1 hivedata]# hadoop fs -put students.txt /
[root@node1 hivedata]# hadoop fs -ls /
Found 3 items
-rw-r--r--   3 root supergroup        526 2023-06-13 15:26 /students.txt
drwx-w----   - root supergroup          0 2023-06-13 09:28 /tmp
drwxr-xr-x   - root supergroup          0 2023-06-13 09:12 /user

--从HDFS加载数据  数据位于HDFS文件系统根目录下  本质是hadoop fs -mv 移动操作
--先把数据上传到HDFS上  hadoop fs -put /root/hivedata/students.txt /
LOAD DATA INPATH '/students.txt' INTO TABLE student_hdfs;

在这里插入图片描述

🛥️插入数据

  • insert+select:将后面查询返回的结果作为内容插入到指定表中
INSERT INTO TABLE tablename select_statement1 FROM from_statement;

底层使用MapReduce,会经历一系列操作,所以会很慢,不要急。

--step1:创建一张源表student使用之前的数据
drop table if exists student;
create table student(num int,name string,sex string,age int,dept string)
row format delimited fields terminated by ',';

--step2:加载数据
load data local inpath '/root/hivedata/students.txt' into table student;


--step3:创建一张目标表  只有两个字段
create table student_from_insert(sno int,sname string);

--使用insert+select插入数据到新表中
insert into table student_from_insert select num,name from student;



在这里插入图片描述

🚤查询数据

语法结构

SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[ORDER BY col_list]
[LIMIT [offset,] rows]
  • 从哪里查询取决于FROM后面的参数

  • 表名和列名不区分大小写

🛶练习

数据准备:

us-covid19-counties.dat

美国2021-01-28各个县累计新冠确诊病例数和累计死亡病例数

上传文件至LOCAL

#上传文件至node1
[root@node1 ~]# cd hivedata/
[root@node1 hivedata]# ls
archer.txt  students.txt  team_ace_player.txt
[root@node1 hivedata]# ls
archer.txt  students.txt  team_ace_player.txt  us-covid19-counties.dat
[root@node1 hivedata]# pwd
/root/hivedata

创建表

--创建表t_usa_covid19
drop table if exists t_usa_covid19;
CREATE TABLE t_usa_covid19(
    count_date string,
    county string,
    state string,
    fips int,
    cases int,
    deaths int)
row format delimited fields terminated by ",";

--将数据load加载到t_usa_covid19表对应的路径下
load data local inpath '/root/hivedata/us-covid19-counties.dat' into table t_usa_covid19;

在这里插入图片描述

虽然数据导入较慢,但数据查询很快。

🌑select_expr

表示检索查询返回的列,必须至少有一个select_expr。

SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[ORDER BY col_list]
[LIMIT [offset,] rows];
select county, cases, deaths from t_usa_covid19;
--查询当前数据库
select current_database(); --省去from关键字

🌒ALL DISTINCT

  • 用户查询指定返回结构中重复的行如何处理
  • 没有给出这些选择,默认ALL(匹配所有行)
  • DISTINCT指定从结果集中删除重复的行
--返回所有匹配的行
select state from t_usa_covid19;
--相当于
select all state from t_usa_covid19;

--返回所有匹配的行 去除重复的结果
select distinct state from t_usa_covid19;
--多个字段distinct 整体去重
select distinct county,state from t_usa_covid19;

建议给Hive服务器内存和核数给多一点,要不然可能会很慢。

🌓WHERE

  • 后跟布尔表达式(true/false),用于查询过滤,当布尔表达式为true,返回select后expr表达是结果,否则返回空
  • 可以使用Hive正常的任何函数和运算符,聚合函数除外
select * from t_usa_covid19 where 1 > 2;  -- 1 > 2 返回false 返回为空
select * from t_usa_covid19 where 1 = 1;  -- 1 = 1 返回true 查询所有

--找出来自于California州的疫情数据
select * from t_usa_covid19 where state = 'California';
--where条件中使用函数 找出州名字母长度超过10位的有哪些
select * from t_usa_covid19 where length(state) >10 ;

🌔聚合

  • SQL用于计数和计算的内建函数
  • 聚合操作函数:COUNT ,SUM,MAX ,MIN,AVG等函数
  • 聚合不管袁术数据有多少行记录,经聚合只返回一行
AVG(column) 返回某列的平均值

COUNT(column) 返回某列的行数(不包括 NULL 值)

COUNT(*) 返回被选行数

MAX(column) 返回某列的最高值

MIN(column) 返回某列的最低值

SUM(column) 返回某列的总和
--学会使用as 给查询返回的结果起个别名
select count(county) as county_cnts from t_usa_covid19;
--去重distinct
select count(distinct county) as county_cnts from t_usa_covid19;

--统计美国加州有多少个县
select count(county) from t_usa_covid19 where state = "California";
--统计德州总死亡病例数
select sum(deaths) from t_usa_covid19 where state = "Texas";
--统计出美国最高确诊病例数是哪个县
select max(cases) from t_usa_covid19;

🌕GROUP BY

  • 用于结合聚合函数,根据一个或多个列对结果集进行分组
--根据state州进行分组 统计每个州有多少个县county
select count(county) from t_usa_covid19 where count_date = "2021-01-28" group by state;

--统计的结果是属于哪一个州的
select state,count(county) as county_nums from t_usa_covid19 where count_date = "2021-01-28" group by state;

--每个县的死亡病例数 把deaths字段加上返回  
select state,count(county),sum(deaths) from t_usa_covid19 where count_date = "2021-01-28" group by state;
-- sql报错了org.apache.hadoop.hive.ql.parse.SemanticException:Line 1:27 Expression not in GROUP BY key 'deaths'

--group by的语法限制
--结论:出现在GROUP BY中select_expr的字段:要么是GROUP BY分组的字段;要么是被聚合函数应用的字段。
--deaths不是分组字段 报错
--state是分组字段 可以直接出现在select_expr中
--被聚合函数应用
select state,count(county),sum(deaths) from t_usa_covid19 where count_date = "2021-01-28" group by state;
--避免出现歧义

🌖HAVING

  • Having让我们筛选分组后各组数据,可以在Havin中使用聚合函数,此时where,group by执行结束,结果集以及确定(在确定的结果集上进行操作)
--在group by的时候聚合函数已经作用得出结果 having直接引用结果过滤 不需要再单独计算一次了
select state,sum(deaths) as cnts from t_usa_covid19 where count_date = "2021-01-28" group by state having cnts> 10000;

🌗ORDER BY

  • 用于指定列对结果集进行排序
  • 默认升序(ASC)对记录进行排序,降序(DESC)
SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[ORDER BY col_list]
[LIMIT [offset,] rows]
--不写排序规则 默认就是asc升序
select * from t_usa_covid19 order by cases asc;

--根据死亡病例数倒序排序 查询返回加州每个县的结果
select * from t_usa_covid19 where state = "California" order by cases desc;

🌘LIMIT

  • 限制SELECT语句返回行数
  • 接受一个或两个数字参数 ,必须都是非负整数
  • 第一个参数代表返回第一行的偏移量,第二个参数代表返回的最大行数。
  • 给出单个参数,代表最大行数,偏移量默认为0
--返回结果集的前5条
select * from t_usa_covid19 where count_date = "2021-01-28" and state ="California" limit 5;

--返回结果集从第3行开始 共3行
select * from t_usa_covid19 where count_date = "2021-01-28" and state ="California" limit 2,3;
--注意 第一个参数偏移量是从0开始的 0 1 2 从第三条数据开始(包含第三条数据)



select state,sum(deaths) as cnts from t_usa_covid19
where count_date = "2021-01-28"
group by state
having cnts> 10000
limit 2;

🛳️JOIN

  • 根据两个或多个表中列之间的关系,从这些表中共同查询数据。
  • inner join(内连接) left join(左连接)
join_table:
table_reference [INNER] JOIN table_factor [join_condition]
| table_reference {LEFT} [OUTER] JOIN table_reference join_condition
join_condition:
ON expression
  • table_reference:join查询使用的表名
  • table_factor:链接查询使用的表名
  • join_condition:join查询关联条件

数据准备:

数据集中hive join

  • 员工表 employee.txt
  • 地址信息 employee_address.txt
  • 联系方式 employee_connection.txt
#上传表数据
[root@node1 ~]# cd hivedata/
[root@node1 hivedata]# ls
archer.txt  students.txt  team_ace_player.txt  us-covid19-counties.dat
[root@node1 hivedata]# rm -rf *
[root@node1 hivedata]# ls
employee_address.txt  employee_connection.txt  employee.txt

-- 员工表
CREATE TABLE employee(
   id int,
   name string,
   deg string,
   salary int,
   dept string
 ) row format delimited
fields terminated by ',';

--住址信息表
CREATE TABLE employee_address (
    id int,
    hno string,
    street string,
    city string
) row format delimited
fields terminated by ',';

--联系方式信息表
CREATE TABLE employee_connection (
    id int,
    phno string,
    email string
) row format delimited
fields terminated by ',';

--加载数据到表中
load data local inpath '/root/hivedata/employee.txt' into table employee;
load data local inpath '/root/hivedata/employee_address.txt' into table employee_address;
load data local inpath '/root/hivedata/employee_connection.txt' into table employee_connection;

⭐inner join

  • 只有进行连接的两个表都存在与连接条件相匹配的数据才会被留下来
  • inner join == join
select e.id ,e.name,e_a.city,e_a.street
from employee e
join employee_address e_a
on e.id =e_a.id;

在这里插入图片描述

🌟left join

  • join时以左表数据为准,右表与之管理,左边数据全部返回,右表关联数据返回,关联不上使用null返回。
select e.id,e.name,e_conn.phno,e_conn.email
from employee e
left join employee_connection e_conn
on e.id =e_conn.id;

在这里插入图片描述

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

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

相关文章

Cache技术在星辰处理器中的应用

Cache技术在星辰处理器中的应用-修复MicroPython在MM32F5上启动慢的问题 文章目录 Cache技术在星辰处理器中的应用-修复MicroPython在MM32F5上启动慢的问题引言Cache的工作原理需要关闭DCache的情况鱼和熊掌都想要使用内存保护单元MPU使用内存隔离/同步指令 总结参考文献 引言 …

catkin cmake官方教程解读以及资料补充

这里写目录标题 cmakei下载cmake 官方教程教程1step1最低版本 报错报错2 vscode 路径没有配置好setting.json通过该方式打开的似乎是一个全局的文件,可以为本工作文件夹下设置一个本地的吗 报错3配置cmake工具链准确的流程报错4 cpp中main函数返回值问题结果 官方教…

虚拟机centos7无法正常启动:Generating“/run/initramfs/rdsosreport.txt“

一、问题描述 1.出现问题的原因 Centos 7 断电导致 ,最近电脑老是自己蓝屏,然后重启电脑,一个月里断断续续可能有个3次左右,突然发现启动就这个问题,估计是虚拟机异常物理断电导致的系统磁盘出错了 2.具体的报错信息…

打开冒险岛提示丢失vcruntime140.dll的解决方法

今天准备打开冒险岛软件的时候,当打开我自己的冒险岛软件后,弹出了一个对话框,内容是:由于找不到vcruntime140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题。 我很纳闷,前几天还好好着呢。于是…

【ARIMA-WOA-LSTM】合差分自回归移动平均方法-鲸鱼优化-长短期记忆神经网络研究(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

vue新手入门实践教程

介绍vue运行环境的搭建、vue项目的初步构建与运行、使用element-ui组件构建页面内容、使用页面模块与路由设置等。基于此教程,可以初步实现一个静态网页,并对vue项目由一定理解。 1、基本环境安装 vue项目的编译运行依赖nodejs环境,故需要下…

使用rasterio计算tif文件中两点之间的物理实际距离

假设有一张含有地理坐标信息的tif格式的图片及其对应的jpg或者png格式的普通图片 如下图所示: 其中第一张为tif格式的地理信息图,第二张为按照一定比例下采样之后转换得到的普通jpg图片 如何计算jpg图片中任意两点之间的实际距离呢? 比如&a…

终于等到你:期待已久的CAD .NET 15 Crack

期待已久的CAD .NET 15 现已推出!新包包括一个.NET 6 框架构建。目前,它仅与 Windows 兼容,但我们计划在未来的版本中添加对 Linux 的支持。 我们还进行了一系列更改以增强库的稳定性并改进其导入和导出功能。他们来了: 改进了 DW…

Scala--03

第6章 面向对象 Scala 的面向对象思想和Java 的面向对象思想和概念是一致的。 Scala 中语法和 Java 不同,补充了更多的功能。 6.1类和对象详解 6.1.1组成结构 构造函数: 在创建对象的时候给属性赋值 成员变量: 成员方法(函数) 局部变量 代码块 6.1.2构造器…

详解c++---map的介绍

目录标题 map容器的介绍pair的介绍map的构造函数insert函数make_pair函数find函数map的[ ]重载multimap map容器的介绍 通过之前的学习想必大家对set容器的理解应该非常的深刻了,我们知道他的底层是一个k结构的搜索二叉树,可以对数据进行去重并排序&…

Redis实现分布式锁详解

Redis实现分布式锁详解 一 分布式锁简介二 Redis实现分布式锁核心思路三 Redis实现分布式锁实践3.1 锁的基本接口3.2 加锁解锁逻辑3.3 修改业务逻辑3.4 单元测试观察结果 四 Redis分布式锁误删情况4.1.Redis分布式锁误删情况逻辑说明:4.2 解决Redis分布式锁误删问题…

当心健身跑步应用悄悄泄露用户住址

据BleepingComputer 6月11日消息,美国北卡罗来纳州立大学罗利分校的研究人员发现 Strava 应用程序的热图功能存在隐私风险,可能导致攻击者识别出用户的家庭住址。 Strava 是一款流行的跑步伴侣和健身追踪应用程序,在全球拥有超过 1 亿用户&a…

2个月“我“从功能测试进阶到自动化测试,offer收到麻了...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 自动化测试是将人…

C++【STL】之vector模拟实现

C vector类模拟实现 上一篇讲解了vector的使用,这一篇接着介绍vector的模拟实现,这里依然是讲解常用接口的模拟实现,话不多说,正文开始! 文章目录: C vector类模拟实现1. 成员变量2. 默认成员函数2.1 构造…

使用lcov生成覆盖率报告

使用lcov生成覆盖率报告 1- 需要准备的东西1.1 工具lcov1.2 需要用到中间脚本 gcno gcda1.3 源文件 2- 生成覆盖率报告2.1 step1: 编译阶段2.2 step2: 数据收集与提取阶段2.3 step3: 报告形成阶段2.4 step4: lcov生成覆盖率报告结果info文件2.5 step5: genhtml 命令生成网页版的…

给定一个字符串比如“abcdef”,要求写个函数变成“defabc”,位数是可变的。

首先可以使用字符串切片的方法来实现这个需求。 具体做法是:① 定义一个整数变量 n 表示要切割的位置,本实例中为 3 。 ② 将字符串按照 n 分割成两个字串,即 “abc” 和 “def”。 ③ 将两个字符串颠倒顺序,即 “cba” 和 “fed…

数据结构 栈和队列

栈和队列基本概念 栈(Stack)和队列(Queue)都是常见的数据结构,用于存储和操作一组元素。它们在结构和操作方式上有所不同。 栈的基本概念: 栈是一种线性数据结构,具有后进先出(L…

CentOS GCC 离线升级 编译安装 8.3.0

从系统自带的 gcc-4.8.5 版本升级至 gcc-8.3.0 版本 目录 下载源代码: 下载依赖: 编译(约一个小时) 重开控制台确认是否生效 下载源代码: https://ftp.gnu.org/gnu/gcc/gcc-8.3.0/gcc-8.3.0.tar.gzhttps://ftp.gn…

Nacos和Feign

Nacos配置管理 统一配置管理实现 1.引入Nacos的配置管理客户端依赖 <!--nacos的配置管理依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency…

国产开源中文大语言模型再添重磅玩家:清华大学NLP实验室发布100亿参数规模的开源可商用大语言模型CPM-Bee

5月27日&#xff0c;OpenBMB发布了一个最高有100亿参数规模的开源大语言模型CPM-BEE&#xff0c;OpenBMB是清华大学NLP实验室联合智源研究院成立的一个开源组织。该模型针对高质量中文数据集做了训练优化&#xff0c;支持中英文。根据官方的测试结果&#xff0c;其英文测试水平…