Hive 表 DML 操作

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

第1关:将文件中的数据导入(Load)到 Hive 表中

导入命令语法:

Load操作执行copy/move命令把数据文件copy/moveHive表位于 HDFS上的目录位置,并不会对数据内容执行格式检查或格式转换操作。Load命令语法为:

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=vall,partcol2=val2 …)];

文件路径filepath可以是指向HDFS的相对路径或是绝对路径,也可以是指向本地文件系统(Linux文件系统)相对路径(当前工作目录)或绝对路径。

filepath指向HDFSLOAD执行的是move操作(即执行LOADfilepath中的文件不再存在);若filepath指向本地文件系统,LOAD执行的是copy操作(即执行LOADfilepath中的文件仍然存在),但需要指定LOCAL关键字。

filepath指向一个文件,LOADcopymove相应的文件到表tablename;若filepath指向一个目录,LOADcopymove相应目录下的所有文件到表tablename若创建表时指定了分区列,使用 LOAD 命令加载数据时也要为所有分区列指定特定值。

针对LOAD语句中指明LOCAL关键字,INPATH参数可以使用下述方式确定:

  • Hive 会在本地文件系统中查找filepath

  • 用户可以设置filepath为文件绝对路径,如file:///user/hive/data

针对LOAD语句中未指明LOCAL关键字,INPATH参数可以使用下述方式确定:

  • filepath为相对路径,Hive会解析成为/user/<username>/filepath

  • filepath未指定模式或文件系统类型(如hdfs://namenode:9000/),Hive会把${fs.default.name}值作为Namenode URL

若语句带OVERWRITE关键字,目标表或分区中的原始数据会被删除,替换成新数据;若未指定OVERWRITE关键字,新数据会以追加的方式被添加到表中。

若表或分区中的任何一个文件与filepath中的任何一个文件同名,则表或分区中的同名文件会被filepath中的同名文件替换。

将本地txt文件导入到分区表中(例子)

创建数据库shopping

hive 表 dml 操作,hive,hadoop,大数据

  • 如假设本地文件/home/shoppings.txt内容为:
  • hive 表 dml 操作,hive,hadoop,大数据
  • 字段间分隔符,根据表中设置FIELDS TERMINATED BY ','确定的。如果表中设置FIELDS TERMINATED BY '\t',那么字段间就应该用Tab键间隔开

  • 集合分隔符-根据表中设置COLLECTION ITEMS TERMINATED BY '-'确定的。如果表中设置COLLECTION ITEMS TERMINATED BY ',',那么字段间就应该用逗号,键间隔开

  • 使用LOAD命令加载本地文件数据到items_info2表相应的分区中(PARTITION关键字指定内容):
  • hive 表 dml 操作,hive,hadoop,大数据

执行LOAD命令后,Hive会在 HDFS 的/hive/shopping/items2/路径下创建目录p_category=shoes/p_brand=playboy/,并且会把items_info.txt文件复制到上述创建的目录下

hive 表 dml 操作,hive,hadoop,大数据

 hive 表 dml 操作,hive,hadoop,大数据

hive 表 dml 操作,hive,hadoop,大数据 

代码块:

/********* Begin *********/
/*创建数据库*/
CREATE DATABASE IF NOT EXISTS test1
LOCATION '/hive/test1'; /*指定数据库位置*/
USE test1;
 /*建表*/
CREATE TABLE IF NOT EXISTS test1.student(
Sno INT COMMENT 'student sno',
name STRING COMMENT 'student name' ,
age INT COMMENT 'student age',
sex STRING COMMENT 'student sex',
score STRUCT <chinese:FLOAT,math:FLOAT,english:FLOAT> COMMENT 'student score')
COMMENT 'students information tabe'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',' 
COLLECTION ITEMS TERMINATED BY '-';
 /*插入数据*/
load data local inpath '/home/student.txt' overwrite into table student;

/********* End *********/
select * from student;

第2关:Select 操作

 select 语法格式:

SELECT [ALL | DISTINCT] select_expr,select_expr,… FROM table_reference[WHERE where_condition] [GROUP BY col_list] [CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list]] [LIMIT number]

hive 表 dml 操作,hive,hadoop,大数据

hive 表 dml 操作,hive,hadoop,大数据 

 代码块:

--Begin
use test2;
--查询student表中所有的行和列
select * from student;
--查询年龄age > 17的女生female
select * from student where age>17 and sex="female";
--查询语文成绩Chinese > 90的记录
select * from student where score.chinese>90;
--从student表中查询前3条记录
select * from student limit 3;
--返回按年龄降序的前2条记录
select * from student sort by age desc limit 2;
--End

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

单表插入语法:

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

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

单表插入语法( 追加 方式):

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表中。

hive 表 dml 操作,hive,hadoop,大数据

hive 表 dml 操作,hive,hadoop,大数据 

代码块:

--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 ii
insert overwrite table student2
select * where ii.age>17
insert overwrite table student3
select * where ii.age>17;


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

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


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

 第4关:将 select 查询结果写入文件

单文件写入:

INSERT OVERWRITE [LOCAL] DIRECTORY directory[ROW FORMAT row_format] [STORED AS file_format]SELECT select_statement FROM from_statements;

若指定LOCAL关键字,查询结果写入本地文件系统中(OS 文件系统);否则,查询结果写入到分布式文件系统中(HDFS)。

多文件写入:

FROM from_statement
INSERT OVERWRITE [LOCAL] DIRECTORY directory1SELECT select_statement1[INSERT OVERWRITE [LOCAL] DIRECTORY directory2SELECT select_statement2];

hive 表 dml 操作,hive,hadoop,大数据

代码块:

--使用test4数据库
use test4;
--Begin
 
--查询student表中的前两条数据写入到本地文件/home/test4目录下
insert overwrite local directory '/home/test4'
select * from student limit 2;
 
--查询student表中男生的数据写入到本地文件/home/test4_1目录下,
--女生的数据写入到本地文件/home/test4_2目录下
FROM student
INSERT OVERWRITE  LOCAL DIRECTORY '/home/test4_1'
SELECT  * where sex='male'
INSERT OVERWRITE  LOCAL DIRECTORY '/home/test4_2'
SELECT  * where sex='female' ;
--End

 文章来源地址https://www.toymoban.com/news/detail-734999.html

到了这里,关于Hive 表 DML 操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Hive 常用DML操作

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

    2024年02月07日
    浏览(37)
  • HIVE表 DML 操作——第3关:将 select 查询结果插入 hive 表中

    第3关:将 select 查询结果插入 hive 表中 任务描述 本关任务:根据编程要求将 select 查询结果插入 hive 表中。 相关知识 为了完成本关任务,你需要掌握:1. 单表插入,2. 多表插入。 通过使用查询子句从其他表中获得查询结果,然后使用 INSERT 命令把数据插入到 Hive 新表中(

    2024年02月02日
    浏览(42)
  • HIVE表 DML 操作——第4关:将 select 查询结果写入文件

    第4关:将 select 查询结果写入文件 任务描述 本关任务:根据编程要求将 select 查询结果写入文件。 相关知识 为了完成本关任务,你需要掌握:1.单文件写入,2.多文件写入。 可以把 Hive 查询结果写入或导出到文件中,与查询结果插入到表中类似,导出 Hive 表中的数据到文件

    2024年02月05日
    浏览(38)
  • Hive(19):DML之Insert插入数据

    1 背景:RDBMS中insert使用(insert+values) 在MySQL这样的RDBMS中,通常是insert+values的方式来向表插入数据,并且速度很快。这也是RDBMS中插入数据的核心方式。 假如说对Hive的定位不清,把Hive当成RDBMS来使用,也使用insert+values的方式插入数据,会如何呢? 你会发现执行过程非常非

    2024年02月13日
    浏览(68)
  • Hive(18):DML之Load加载数据

    1 背景 回想一下,当在Hive中创建好表之后,默认就会在HDFS上创建一个与之对应的文件夹,默认路径是由参数hive.metastore.warehouse.dir控制,默认值是/user/hive/warehouse。 要想让hive的表和结构化的数据文件产生映射,就需要把文件移到到表对应的文件夹下面,当然,可以在建表的时

    2024年02月13日
    浏览(70)
  • Hive(21):DML之Update、Delete更新、删除数据

    首先,必须明确,你理解的Hive这款软件,定位是什么?是面向事务支持事务的RDBMS?还是面向分析,支持分析的数据仓库。这很重要。 Hive是基于Hadoop的数据仓库,面向分析支持分析工具。因此在Hive中常见的操作的就是分析查询select操作。将已有的结构化数据文件映射成为表,

    2024年02月15日
    浏览(53)
  • Hive DDL和DML

    目录 一 DDL 1.1 数据库 1.1.1 创建数据库 1.1.2 查询数据库 1.1.3 修改数据库 1.1.4 删除数据库 1.1.5 切换当前数据库 1.2 表 1.2.1 创建表 1.2.2 查看表 1.2.3 修改表 3.2.4 删除表 3.2.5 清空表 二 DML 2.1 Load 2.2 Insert 2.2.1  将查询结果插入表中 2.2.2 将给定Values插入表中 2.2.3 将查询结果写入目标

    2023年04月16日
    浏览(35)
  • [Hive高级特性与 DDL和DML语法]

    目录 🎇前言: 🎇 HiveQL语言的基本语法,包括DDL和DML两个方面。    🎇DDL(数据定义语言):    🎇DML(数据操作语言):    🎇 Hive高级特性 多种内置函数: 分区和桶: 索引: 视图: UDF:    🎇此文章在阿为的刺激之下,奋笔疾书而作    🎇DDL(数据定义语言):

    2024年02月10日
    浏览(41)
  • 四、DML-2.数据操作-修改

     原数据表: 修改 id为1 的数据,将 name修改为itheima update employee set name = \\\'itheima\\\' where id = 1 ; 步骤一:输入update命令并执行:  步骤二:刷新查看employee表修改后数据: 修改 id为1 的数据,将 name修改为小昭 , gender修改为女 update employee set name = \\\'小昭\\\' , gender = \\\'女\\\'   where id =

    2024年02月16日
    浏览(34)
  • MySQL数据库——DML基本操作

    前面我们学习了MySQL——DDL操作,对数据库和表的结构的操作,那么今天我将为大家分享MySQL——DML操作,对表数据的操作。 MySQL DML操作有以下几种: 插入操作(INSERT):用于向数据库中插入新的数据行。可以一次插入单行数据,也可以使用一条SQL语句一次性插入多行数据。

    2024年02月15日
    浏览(60)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包