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

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

任务描述

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


相关知识

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

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


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


单表插入
  • 单表插入语法:
INSERT OVERWRITE TABLE tablename [PARTITION (partcol1=val1,partcol2=val2,……) [IF NOT


该方法会 覆盖 表或分区中的数据(若对特定分区指定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_state
  • 该方法以追加的方式把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岁的数据插入到student2、student3中的结果
  • 13-20行返回的是以追加插入的方式把student表中的男生数据插入到student2,以覆盖插入的方式把女生数据插入到student3中的结果
--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


目录
相关文章
|
23天前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
25 4
|
23天前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
27 2
|
4月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之从mysql读数据写到hive报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
5月前
|
SQL 缓存 关系型数据库
ClickHouse(19)ClickHouse集成Hive表引擎详细解析
Hive引擎允许对HDFS Hive表执行 `SELECT` 查询。目前它支持如下输入格式: -文本:只支持简单的标量列类型,除了 `Binary` - ORC:支持简单的标量列类型,除了`char`; 只支持 `array` 这样的复杂类型 - Parquet:支持所有简单标量列类型;只支持 `array` 这样的复杂类型
199 1
|
5月前
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之在进行Hive分区truncate操作时遇到权限不足,怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
72 0
|
5月前
|
SQL 资源调度 数据库连接
Hive怎么调整优化Tez引擎的查询?在Tez上优化Hive查询的指南
在Tez上优化Hive查询,包括配置参数调整、理解并行化机制以及容器管理。关键步骤包括YARN调度器配置、安全阀设置、识别性能瓶颈(如mapper/reducer任务和连接操作),理解Tez如何动态调整mapper和reducer数量。例如,`tez.grouping.max-size` 影响mapper数量,`hive.exec.reducers.bytes.per.reducer` 控制reducer数量。调整并发和容器复用参数如`hive.server2.tez.sessions.per.default.queue` 和 `tez.am.container.reuse.enabled`
332 0
|
6月前
|
SQL 存储 大数据
Hive的查询、数据加载和交换、聚合、排序、优化
Hive的查询、数据加载和交换、聚合、排序、优化
124 2
|
6月前
|
SQL DataWorks 网络安全
DataWorks操作报错合集之DataWorks连接Hive数据库时出现连接超时的问题如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
6月前
|
SQL 关系型数据库 MySQL
Hive 表注释乱码解决
Hive元数据在MySQL默认使用`latin1`字符集导致注释乱码。可通过修改MySQL配置文件`/etc/my.cnf`,在`[mysqld]`和末尾添加`character-set-server=utf8`等设置,重启MySQL。然后在Hive数据库中调整表字段、分区字段、索引注释的字符集。注意,这仅对新表生效。测试创建带注释的Hive表,问题解决。
84 0
|
6月前
|
SQL HIVE
Hive表删除数据不支持使用Delete From...
Hive表删除数据不支持使用Delete From...
241 0