HIVE表 DML 操作——第3关:将 select 查询结果插入 hive 表中

这篇具有很好参考价值的文章主要介绍了HIVE表 DML 操作——第3关:将 select 查询结果插入 hive 表中。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第3关:将 select 查询结果插入 hive 表中


任务描述

本关任务:根据编程要求将select查询结果插入hive表中。

相关知识

为了完成本关任务,你需要掌握:1. 单表插入,2. 多表插入。

通过使用查询子句从其他表中获得查询结果,然后使用INSERT命令把数据插入到Hive新表中(Hive会根据MapReduce中的reduce任务个数在HDFS上的hive新表目录下创建相应的数据文件000000_0,若有多个reduce任务,依次以000001_0000002_0、…… 类推)。

该操作包括表单插入(一次性向一个hive表插入数据)和多表插入(一次性向多个hive表插入数据)。INSERT命令可以操作在表和特定的分区上,如果属于分区表,必须指明所有分区列和其对应的分区列属性值。

单表插入
  • 单表插入语法:

    INSERT OVERWRITE TABLE tablename [PARTITION (partcol1=val1,partcol2=val2,……) [IF NOT EXISTS]] SELECT select_statement FROM from_statement;
    

    该方法会 覆盖 表或分区中的数据(若对特定分区指定IF NOT EXISTS将不执行覆盖操作)。

    如查询items_info表,把查询结果放到items_info2表中:

    hive>  insert overwrite table items_info2
    >  partition(p_category='clothes',p_brand='playboy')
    >  select * from items_info ii
    >  where ii.categroy
    
  • 单表插入语法( 追加 方式)

    INSERT INTO TABLE tablename [PARTITION (partcol1=val1,partcol2=val2,……) ] SELECT select_statement FROM from_statement;
    

    该方法以追加的方式把SELECT子句返回的结果添加到表或分区中。

多表插入
FROM from_statement
 INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1,partcol2=val2…) [IF NOT EXISTS]] SELECT select_statement1
 [INSERT OVERWRITE TABLE tablename2 [PARTITION … [IF NOT EXISTS]] SELECT select_statement2]
  [INSERT INTO TABLE tablename2 [PARTITION … ] SELECT select_statement2]…;

多表插入操作的开始第一条命令指定所有表执行的SELECT命令所对应的FROM 子句,针对同一个表,既可以执行INSERT OVERWRITE操作,也可以执行 INSERT INTO操作(如表tablename2)。

多表插入操作可以降低源表的扫描次数,Hive可以通过仅扫描一次数据源表,然后针对不同的Hive表应用不同的查询规则从扫描结果中获取目标数据插入到不同的Hive表中。

如把从items_info中扫描的结果根据不同的查询规则插入到表的不同分区中:

hive>  FROM items_info ii
    >  INSERT INTO TABLE items_info2
    >  PARTITION (p_category='clothes',p_brand='playboy')
    >  SELECT * WHERE ii.category='clothes' AND ii.brand='playboy'
    >  INSERT OVERWRITE TABLE items_info2
    >  PARTITION (p_category='shoes',p_brand='playboy') 
    >  SELECT * WHERE ii.category='shoes' AND ii.brand='playboy'
编程要求

test3数据库中有student表,表中数据如下:

Sno name age sex score(Chinese-Math-English)
001 Xiaohong 18 female 96-88-90.5
002 Xiaoliang 17 male 95-88-93.5
003 Xiaoming 19 male 86.5-98-91
004 Xiaoguang 18 male 88-80-94
005 Xiaohua 16 female 97-58.5-88
  • 复制student表两份,分别名为:student2student3 (只复制表结构不复制数据,可参考:HiveDDL操作(一)第二关)
  • 以覆盖插入的方式把student表中前两条数据插入到student2
  • 以追加插入的方式把student表中前两条数据插入到student2
  • 以覆盖插入的方式把student表中年龄大于17岁的数据插入到student2student3
  • 以追加插入的方式把student表中的男生数据插入到student2,以覆盖插入的方式把女生数据插入到student3
注意:由于hive启动时间较长,测评时请耐心等待,大概需要时间:1分钟左右。
测试说明

平台会对你编写的命令进行测试:

若操作成功,会显示如下信息:

2    Xiaoliang    17    male    {"chinese":95.0,"math":88.0,"english":93.5}
1    Xiaohong    18    female    {"chinese":96.0,"math":88.0,"english":90.5}
2    Xiaoliang    17    male    {"chinese":95.0,"math":88.0,"english":93.5}
1    Xiaohong    18    female    {"chinese":96.0,"math":88.0,"english":90.5}
2    Xiaoliang    17    male    {"chinese":95.0,"math":88.0,"english":93.5}
1    Xiaohong    18    female    {"chinese":96.0,"math":88.0,"english":90.5}
1    Xiaohong    18    female    {"chinese":96.0,"math":88.0,"english":90.5}
3    Xiaoming    19    male    {"chinese":86.5,"math":98.0,"english":91.0}
4    Xiaoguang    18    male    {"chinese":88.0,"math":80.0,"english":94.0}
1    Xiaohong    18    female    {"chinese":96.0,"math":88.0,"english":90.5}
3    Xiaoming    19    male    {"chinese":86.5,"math":98.0,"english":91.0}
4    Xiaoguang    18    male    {"chinese":88.0,"math":80.0,"english":94.0}
1    Xiaohong    18    female    {"chinese":96.0,"math":88.0,"english":90.5}
3    Xiaoming    19    male    {"chinese":86.5,"math":98.0,"english":91.0}
4    Xiaoguang    18    male    {"chinese":88.0,"math":80.0,"english":94.0}
2    Xiaoliang    17    male    {"chinese":95.0,"math":88.0,"english":93.5}
3    Xiaoming    19    male    {"chinese":86.5,"math":98.0,"english":91.0}
4    Xiaoguang    18    male    {"chinese":88.0,"math":80.0,"english":94.0}
1    Xiaohong    18    female    {"chinese":96.0,"math":88.0,"english":90.5}
5    Xiaohua    16    female    {"chinese":97.0,"math":58.5,"english":88.0}

说明:

  • 1-2行返回的是以覆盖插入的方式把student表中前两条数据插入到student2中的结果
  • 3-6行返回的是以追加插入的方式把student表中前两条数据插入到student2中的结果
  • 7-12行返回的是以覆盖插入的方式把student表中年龄大于17岁的数据插入到student2student3中的结果
  • 13-20行返回的是以追加插入的方式把student表中的男生数据插入到student2,以覆盖插入的方式把女生数据插入到student3中的结果

开始你的任务吧!祝你成功。文章来源地址https://www.toymoban.com/news/detail-431780.html


--Begin
--使用test3数据库
use test3;
--复制student表两份,分别名为:student2、student3
create table if not exists student2 
like student;

create table if not exists student3 
like student;
--以覆盖插入的方式把student表中前两条数据插入到student2中
insert overwrite table student2 
select * from student limit 2;

--评测代码,勿删
select * from student2;

--以追加插入的方式把student表中前两条数据插入到student2中
insert into table student2 
select * from student limit 2;

--评测代码,勿删
select * from student2;

--以覆盖插入的方式把student表中年龄大于17岁的数据插入到student2、student3中
from student
insert overwrite table student2
select * where student.age > 17
insert overwrite table student3
select * where student.age > 17;


--评测代码,勿删
select * from student2;
select * from student3;

--以追加插入的方式把student表中的男生数据插入到student2,以覆盖插入的方式把女生数据插入到student3中
from student
insert into table student2
select * where student.sex = 'male'
insert overwrite table student3
select * where student.sex = 'female';

--评测代码,勿删
select * from student2;
select * from student3;
--End

到了这里,关于HIVE表 DML 操作——第3关:将 select 查询结果插入 hive 表中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL - 将查询结果插入到另一张表中

    注意:字段必须一致(位置一致,类型一致),否则会出现数据转换错误。 例如,要将 test 表插入到 newTest 表中,则可以通过如下SQL语句实现: 使用场景: 从一个表中选取数据,然后把数据插入另一个表中。常用于创建表的备份复件或者用于对记录进行存档。

    2024年02月16日
    浏览(43)
  • Hive 表 DML 操作

    导入命令语法: Load 操作执行 copy/move 命令把数据文件 copy/move 到 Hive 表位于 HDFS 上的目录位置,并不会对数据内容执行格式检查或格式转换操作。 Load 命令语法为: LOAD DATA [LOCAL] INPATH \\\'filepath\\\' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=vall,partcol2=val2 …)]; 文件路径 filepath 可以是

    2024年02月06日
    浏览(46)
  • Hive 常用DML操作

    本专栏案例数据集链接:   https://download.csdn.net/download/shangjg03/88478038  LOCAL 代表从本地文件系统加载文件,省略则代表从 HDFS 上加载文件: 从本地文件系统加载文件时, `filepath` 可以是绝对路径也可以是相对路径 (建议使用绝对路径); 从 HDFS 加载文件时候,`

    2024年02月07日
    浏览(36)
  • [Hive] 查询结果保存

    使用INSERT OVERWRITE语句的情况: 整个表:可以使用 INSERT OVERWRITE TABLE table_name语句将查询结果直接覆盖整个表中的数据。 特定分区:可以使用INSERT OVERWRITE TABLE table_name PARTITION (partition_column = partition_value)语句将查询结果覆盖特定分区中的数据。 需要注意的是,在执行INSERT OVER

    2024年02月06日
    浏览(37)
  • Hive(22):Select查询数据之基础查询

    1 语法树 table_reference指示查询的输入。它可以是普通物理表,视图,join查询结果或子查询结果。 表名和列名不区分大小写。 2 案例:美国Covid-19新冠select查询 下面来准备一下语法测试环境,在附件资料中有一份数据文件《us-covid19-counties.dat》,里面记录了2021-01-28美国各个县

    2024年02月16日
    浏览(40)
  • 【大数据之Hive】十、Hive之DML(Data Manipulation Language)数据操作语言

    将文件导入Hive表中。 语法: 说明: (1)local:表示从本地加载数据到Hive表;否则从HDFS加载数据到HIve表。 (2)overwrite:表示覆盖表中已有数据,否则表示追加。 (3)partition:表示上传到指定分区,若目标是分区表则需要指定分区。 如: 语法: 说明: (

    2024年02月09日
    浏览(61)
  • Hive(25):Select高级查询之Subqueries子查询

    1 from子句中子查询 在Hive0.12版本,仅在FROM子句中支持子查询。而且必须要给子查询一个名称,因为FROM子句中的每个表都必须有一个名称。 子查询返回结果中的列必须具有唯一的名称。子查询返回结果中的列在外部查询中可用,就像真实表的列一样。子查询也可以是带有UNI

    2024年02月16日
    浏览(42)
  • Hive(24):Select高级查询之Union联合查询

    1 语法规则 UNION用于将来自多个SELECT语句的结果合并为一个结果集。语法如下: 使用DISTINCT与只使用UNION默认值效果一样,都会删除重复行。 使用ALL,不会删除重复行,结果集包括所有SELECT语句的匹配行(包括重复行)。 1.2.0之前的Hive版本仅支持UNION ALL,在这种

    2024年02月13日
    浏览(42)
  • Hive——DML(Data Manipulation Language)数据操作语句用法详解

    Load语句可将文件导入到Hive表中。 说明: local : 表示从本地加载数据到Hive表;否则从HDFS加载数据到Hive表 。 overwrite : 表示覆盖表中已有数据,否则表示追加。 partition : 表示上传到指定分区,若目标是分区表,需指定分区 。 本地文件路径: 执行load语句: load da

    2024年04月28日
    浏览(40)
  • Hive insert插入数据与with子查询

    insert into 与 insert overwrite 都可以向hive表中插入数据,但是insert into直接追加到表中数据的尾部,而insert overwrite会重写数据,既先进行删除,再写入 注意:如果存在分区的情况,insert overwrite只重写当前分区数据,不会全部重写 当在hive中同时使用insert into(overwrite) table xx 与wi

    2024年02月03日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包