上一篇给大家介绍了 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数据操作的更多相关文章

  1. hive从入门到放弃(二)——DDL数据定义

    前一篇文章,介绍了什么是 hive,以及 hive 的架构.数据类型,没看的可以点击阅读:hive从入门到放弃(一)--初识hive 今天讲一下 hive 的 DDL 数据定义 创建数据库 CREAT ...

  2. hive从入门到放弃(四)——分区与分桶

    今天讲讲分区表和分桶表,前面的文章还没看的可以点击链接: hive从入门到放弃(一)--初识hive hive从入门到放弃(二)--DDL数据定义 hive从入门到放弃(三)--DML数据操作 分区 ...

  3. HIVE之 DDL 数据定义 & DML数据操作

    DDL数据库定义 创建数据库 1)创建一个数据库,数据库在 HDFS 上的默认存储路径是/user/hive/warehouse/*.db. hive (default)> create dat ...

  4. hive从入门到放弃(一)——初识hive

    之前更完了<Kafka从入门到放弃>系列文章,本人决定开新坑--hive从入门到放弃,今天先认识一下hive. 没看过 Kafka 系列的朋友可以点此传送阅读: <Kafka从入门到 ...

  5. Oracle基础(十) DML数据操作

    一.DML数据操作语言 主要用于检索.插入和修改数据库信息.它是最常用的SQL命令,如INSERT(插入).UPDATE(更新).SELECT(选择).DELETE(删除). 1.INSERT插入语句 ...

  6. 6.1课堂笔记—DML(数据操作语言),DQL查询语句

    一.DML(数据操作语言) InnoDB MyISAM 支持事务 不支持事务 不支持全文索引 支持全文索引 支持外键约束 不支持 命令查看默认存储引擎 show variables like '%st ...

  7. DML数据操作语言

    DML数据操作语言 用来对数据库中表的数据记录进行更新.(增删改) 插入insert -- insert into 表(列名1,列名2,列名3...) values (值1,值2,值3...):向表中 ...

  8. Hive(6)-DML数据操作

    一. 数据导入 1. 语法 load data [local] inpath 'path' [overwrite] into table table_name [partition (partcol1 ...

  9. Kafka从入门到放弃(三) —— 详说生产者

    上一篇对Kafka做了简单介绍,还没看的朋友可以点击下方链接. Kafka从入门到放弃(一) -- 初识别Kafka 消息中间件必须与生产者和消费者一起存在才有意义,这次先来聊聊Kafka的生产者. ...

随机推荐

  1. K8是—— yaml资源清单

    K8是-- yaml资源清单 一.yaml文件详解 1.Kubernetes支持YAML和JSON格式管理资源对象2.JSON格式:主要用于api接口之间消息的传递3.YAML格式:用于配置和管理,Y ...

  2. 这个Dubbo注册中心扩展,有点意思!

    今天想和大家聊聊Dubbo源码中实现的一个注册中心扩展.它很特殊,也帮我解决了一个困扰已久的问题,刚刚在生产中用了,效果很好,迫不及待想分享给大家. Dubbo的扩展性非常灵活,可以无侵入源码加载自定 ...

  3. 【发点感慨】我的cnblogs的文章被爬到了别的网站,阅读量比在cnblogs上还要高

    近期我写了挺多VictoriaMetrics的文章,在搜索相关文章的时候发现,我的文章被别的网站爬去了: 写写技术文章就是无偿分享给别人看的,越多人看到越多人受益,这一点没毛病. 但是: 爬了别人的文 ...

  4. Rock Pi开发笔记(二):入手Rock Pi 4B plus(基于瑞星微RK3399)板子并制作系统运行

    前言   入手rock pi 4b plus板子,查看具体的实物,然后制作系统,刷系统,让摇滚派的ubuntu系统运行起来.   Rock Pi 4B plus 介绍   ROCK Pi 4 是 Ra ...

  5. 2021美团安洵暗泉re部分复现

    typora-copy-images-to: ./ 安洵杯 sign_in 贪吃蛇 虽然没啥用 smc解密拿一下flag相关的部分 倒着看看sub_40105F 和sub_401055函数 写出解密算 ...

  6. 2、Linux基础--常用系统命令与快捷键

    笔记 1.昨日问题 1.mac系统虚拟机的问题 2.虚拟机连不上网 1.xshell连接不上 1.虚拟网络编辑器和vmnat8网卡设置错误 2.ping不通百度 1.DNS IP编写错误 2.网卡的网 ...

  7. MindSpore多元自动微分

    技术背景 当前主流的深度学习框架,除了能够便捷高效的搭建机器学习的模型之外,其自动并行和自动微分等功能还为其他领域的科学计算带来了模式的变革.本文我们将探索如何用MindSpore去实现一个多维的自动 ...

  8. Asp-Net-Core开发笔记:使用NPM和gulp管理前端静态文件

    前言 本文介绍的是AspNetCore的MVC项目,WebApi+独立前端这种前后端分离的项目就不需要多此一举了~默认前端小伙伴是懂得使用前端工具链的. 为啥要用MVC这种服务端渲染技术呢? 简单项目 ...

  9. Solution -「CCO 2019」「洛谷 P5532」Sirtet

    \(\mathcal{Description}\)   Link.   在一个 \(n\times m\) 的网格图中,每个格子上是空白 . 或沙子 #,四联通的沙子会连成一个整体.令此时所有沙子块同 ...

  10. MySQL架构原理之存储引擎InnoDB_Undo Log

    Undo:意为撤销或取消,以撤销操作为目的,返回某个指定状态的操作. Undo Log:数据库事务开始之前会将要修改的记录存放到Undo日志里,当事务回滚时或者数据库崩溃时可以利用Undo日志撤销为提 ...