hive从入门到放弃(三)——DML数据操作
上一篇给大家介绍了 hive 的 DDL 数据定义语言,这篇来介绍一下 DML 数据操作语言。
没看过的可以点击跳转阅读:
hive从入门到放弃(一)——初识hive
hive从入门到放弃(二)——DDL数据定义
数据写入
数据导入部分默认数据文件格式为 textfile,每一列由‘,’进行分割,以换行分行。
insert
insert 表示向表中插入数据,可以直接插入值,也可以通过查询其他表获取数据插入。
INSERT INTO TABLE target_table VALUES (COL1.VALUE, COL2.VALUE, ...);
INSERT OVERWRITE TABLE target_table SELECT COL1, COL2, ... FROM source_table;
insert into 以追加数据的方式插入到表或分区,原有数据不会删除;
insert overwrite 则是覆盖原来的数据。
load
load data [local]① inpath② 'src_path' [overwrite] into table
target_table [partition (partcol1=val1,…)];
① local 加上此关键字则表示从本地加载数据,不加的话就是从 HDFS 加载;
② inpath 后接要导入的数据文件的路径
数据导出
insert 方式导出
1)将查询的结果导出到本地
insert overwrite local directory 'local_path' select * from table_name;
2)将查询的结果格式化导出到本地(以'/t'结尾的格式分隔字段)
insert overwrite local directory 'local_path'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
select * from table_name;
3)将查询的结果格式化导出到 HDFS 上
insert overwrite directory 'HDFS_PATH'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
select * from table_name;
HDFS 命令方式导出
由于 hive 的数据文件是在 HDFS 上的,因此可以用 HDFS 命令导出。
在 hive CLI 中,只需要将 Hadoop 命令中将‘hdfs’关键字去掉即可,比如:
dfs -get /user/hive/warehouse/src_path /local_target_path;
Hive Shell 命令导出
基本语法:" hive -f/-e 执行语句或者脚本 > file "
bin/hive -e 'select * from table_name;' > local_target_path;
Export & Import
hive 在0.8.0以后的版本中提供了 Export 和 Import 的导数方式
export 可以将数据导出到 HDFS 上,导出数据的同时还会生成一个元数据文件,其用法如下:
export table table_name to 'HDFS_PATH';
import 可将数据导入指定的表中,但导入的数据需要元数据,因此需要配合 export 使用
import table table_name from 'HDFS_PATH';
注意:export/import 命令中的路径必须是目录,而不能是文件
清除数据
truncate table table_name;
truncate 只能清除管理表的数据,不能清除外部表数据
查询数据
查询的语句和大部分的数据库查询 SQL 一样:
SELECT * FROM table_name WHERE condition GROUP BY col1 ORDER BY col2 LIMIT 1;
因此这里只介绍不同或者需要注意的地方。
like 和 rlike
like 和大部分数据库的用法一样,可用于选择类似的值,% 代表零个或多个字符(任意个字符)。
_ 代表一个字符;
而 rlike 则可以用于匹配正则表达式
select * from table_name where col1 RLIKE '[A]';
排序(重点)
hive 的排序关键字有多个,而且每个对应的应用场景也不相同。
order by
order by 全局排序,在 MapReduce 程序中是将所有数据进行排序,因此只有一个 Reducer
select col1, col2 from table_name order by col1 desc;
sort by
order by 在处理大规模的数据集效率较低。
在很多情况下,并不需要全局排序,此时可以使用 sort by。
Sort by 为每个 reducer 产生一个排序文件。
每个 Reducer 内部进行排序,但对全局结果集来说无序。
select * from table_name sort by col1 desc;
distribute by
在某些场景,我们需要控制某条数据应该到哪个 reducer,一般是为了进行后续的聚集操作。
distribute by 类似 MR 中的 partition(自定义分区),可以对数据进行分区,结合 sort by 使用。
distribute by 要分配多个 reduce 进行处理,否则无法看到 distribute by 的效果。
distribute by 的分区规则是根据分区字段的 hash 码与 reduce 的个数进行模除后,
余数相同的分到一个区。
select * from table_name distribute by col1 sort by col2 desc;
Hive 要求 DISTRIBUTE BY 语句要写在 SORT BY 语句之前。
cluster by
当 distribute by 和 sort by 字段相同时,可以使用 cluster by 方式。
cluster by 除了具有 distribute by 的功能外还兼具 sort by 的功能。
但是排序只能是升序,不能指定排序规则为 ASC 或者 DESC。
-- 这两条 SQL 语句效果相同
select * from table_name cluster by col1;
select * from table_name distribute by col1 sort by col1;
小结
本文介绍了 hive DML 数据操作,主要介绍了一些 hive 特有的关键字和用法。
对于 hive SQL 而言,它的很多语法和常用函数和其它关系型数据库类似,比如 hiving,count(),min()等,这些的用法相信大家都比较熟悉
当然有个别还是有所不同,具体使用场景可以查阅相关资料。
转载请注明出处,关注【大数据的奇妙冒险】,解锁更多新知识!
hive从入门到放弃(三)——DML数据操作的更多相关文章
- hive从入门到放弃(二)——DDL数据定义
前一篇文章,介绍了什么是 hive,以及 hive 的架构.数据类型,没看的可以点击阅读:hive从入门到放弃(一)--初识hive 今天讲一下 hive 的 DDL 数据定义 创建数据库 CREAT ...
- hive从入门到放弃(四)——分区与分桶
今天讲讲分区表和分桶表,前面的文章还没看的可以点击链接: hive从入门到放弃(一)--初识hive hive从入门到放弃(二)--DDL数据定义 hive从入门到放弃(三)--DML数据操作 分区 ...
- HIVE之 DDL 数据定义 & DML数据操作
DDL数据库定义 创建数据库 1)创建一个数据库,数据库在 HDFS 上的默认存储路径是/user/hive/warehouse/*.db. hive (default)> create dat ...
- hive从入门到放弃(一)——初识hive
之前更完了<Kafka从入门到放弃>系列文章,本人决定开新坑--hive从入门到放弃,今天先认识一下hive. 没看过 Kafka 系列的朋友可以点此传送阅读: <Kafka从入门到 ...
- Oracle基础(十) DML数据操作
一.DML数据操作语言 主要用于检索.插入和修改数据库信息.它是最常用的SQL命令,如INSERT(插入).UPDATE(更新).SELECT(选择).DELETE(删除). 1.INSERT插入语句 ...
- 6.1课堂笔记—DML(数据操作语言),DQL查询语句
一.DML(数据操作语言) InnoDB MyISAM 支持事务 不支持事务 不支持全文索引 支持全文索引 支持外键约束 不支持 命令查看默认存储引擎 show variables like '%st ...
- DML数据操作语言
DML数据操作语言 用来对数据库中表的数据记录进行更新.(增删改) 插入insert -- insert into 表(列名1,列名2,列名3...) values (值1,值2,值3...):向表中 ...
- Hive(6)-DML数据操作
一. 数据导入 1. 语法 load data [local] inpath 'path' [overwrite] into table table_name [partition (partcol1 ...
- Kafka从入门到放弃(三) —— 详说生产者
上一篇对Kafka做了简单介绍,还没看的朋友可以点击下方链接. Kafka从入门到放弃(一) -- 初识别Kafka 消息中间件必须与生产者和消费者一起存在才有意义,这次先来聊聊Kafka的生产者. ...
随机推荐
- 浅谈java代理模式
讲解java代理模式 目录 讲解java代理模式 何谓代理模式 静态代理 动态代理 JDK动态代理 CGLIB动态代理 何谓代理模式 代理模式,即Proxy Pattern,23种java常用设计模式 ...
- SpringCloud微服务实战——搭建企业级开发框架(三十六):使用Spring Cloud Stream实现可灵活配置消息中间件的功能
在以往消息队列的使用中,我们通常使用集成消息中间件开源包来实现对应功能,而消息中间件的实现又有多种,比如目前比较主流的ActiveMQ.RocketMQ.RabbitMQ.Kafka,Stream ...
- opencv笔记--stitching模块
opencv 提供了全景图像拼接的所有实现,包括: 1)stitching 模块提供了图像拼接过程中所需要的基本元素,该模块主要依赖于 features2d 模块: 2)提供了 stitching_d ...
- CentOS 7 升级 gcc-4.8.5 到 gcc-5.4.0
文章目录 1.环境介绍 2.下载gcc-5.4.0源码包 3.编译安装gcc 4.验证gcc版本 5.更新gcc连接 1.环境介绍 [root@localhost ~]# gcc -v Using b ...
- JVM学习——垃圾回收GC(学习过程)
JVM学习-垃圾回收(GC) 2020年02月19日06:03:56,开始学习垃圾回收,学习资料来源(张龙老师的JVM课程) JVM内存数据区域知识复习 学习垃圾回收之前,要对JVM内部的内存区域有详 ...
- C# 实例解释面向对象编程中的里氏替换原则
在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解.灵活和可维护.这些原则是由美国软件工程师和讲师罗伯特·C·马丁(Robert Cecil Martin)提出的许多原 ...
- Python中特殊函数__str__()
在类中定义了__str__(self)方法,那么当使用print打印实例对象的时候,就会直接打印出在这个方法中return的数据. 案列: 1 class Book: 2 3 def __init__ ...
- CVE-2017-0213漏洞复现
CVE-2017-0213漏洞形成的原因 类型混淆的漏洞通常可以通过内存损坏的方式来进行利用.然而漏洞发现者在利用时,并未采用内存损坏的方式来进行漏洞利用.按照漏洞发现者的说法,内存损坏的利用方式需要 ...
- 都在用神器,只有你还在死磕excel做分析
一.excel数据分析工具_EXCE弱点 EXCEL一直是非常流行的个人计算机数据处理工具,它可以处理多种多样的数据,操作非常简单,支持丰富的函数.统计图表,在工作中更是非常得力的生产力工具.然而随着 ...
- 案例三:shell统计ip访问情况并分析访问日志
题目要求 有日志 1.log,部分内容如下: 112.111.12.248 – [25/Sep/2013:16:08:31 +0800]formula-x.haotui.com"/secco ...