大数据从入门到精通(超详细版)之Hive的DML操作,通俗易懂,包看包会!!!

发布时间:2023年12月22日

前言

嗨,各位小伙伴,恭喜大家学习到这里,不知道关于大数据前面的知识遗忘程度怎么样了,又或者是对大数据后面的知识是否感兴趣,本文是《大数据从入门到精通(超详细版)》的一部分,小伙伴们如果对此感谢兴趣的话,推荐大家按照大数据学习路径开始学习哦。

以下就是完整的学习路径哦。

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

大数据从入门到精通文章体系!!!!!!!!!!!!!!

↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑

推荐大家认真学习哦!!!

上一篇文章我们已经学习了Hive的DDL操作,了解到了Hive的建表语句与实际操作,接下来我们学习得深入一点,我们来学习Hive的DML操作,学习如何操作Hive当中的数据。

在这里插入图片描述

Hive的DML数据操作

明确学习目标

我们学习Hive的DML语句之前,我们需要先明确Hive的DML语句的使用场景:

  • Hive的数据多是用于大数据场景下进行分析计算的,而不是用于存储数据的,请大家首先明确这一点。
  • 真实开发环境当中的Hive中的数据一般是海量的,很少进行更新和删除的操作,因为不实用且耗费性能。

Load操作

说明

将文件数据导入到Hive的表当中。

在这里插入图片描述

语法:

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

关键字说明:

  1. local:表示从本地加载数据到Hive表;否则从HDFS加载数据到Hive表。

    注意,这里的本地,存在两种不同的情况:

    一种是使用shell界面操作的情况,这里的本地指客户端所在的本地路径

    另一种是使用JDBC操作的情况,这里的本地指hiveserver2所在节点的本地路径

  2. overwrite:表示覆盖表中已有数据,否则表示追加。

  3. partition:表示上传到指定分区,若目标是分区表,需指定分区。分区表的概念后续后进行详细的介绍

实际操作

首先创建表:

CREATE TABLE myhive.test_load(
  dt string comment '时间(时分秒)', 
  user_id string comment '用户ID', 
  word string comment '搜索词',
  url string comment '用户访问网址'
) comment '搜索引擎日志表' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

接下来准备文件:

  • 本地:

    在这里插入图片描述

  • HDFS:

    ##从本地上传文件带HDFS
    hdfs dfs -put /export/test/search_log.txt /tmp/search_log.txt
    ##查看文件内容
    hdfs dfs -cat /tmp/search_log.txt
    

    在这里插入图片描述

可以看到数据都已经加载准备完毕了,接下来就使用我们的Load命令加载文件数据吧

  • 首先从本地加载, 此处加了local关键字,表示我们的数据是从本地开始加载的

    load data local inpath '/export/test/search_log.txt' into table myhive.test_load;
    

在这里插入图片描述

数据从本地加载成功

  • 接下来再从HDFS加载,此时就不使用local关键字了

    #先清空表数据
    truncate table test_load;
    
    #此处使用了overwrite关键字,覆盖数据而不是追加数据
    load data inpath '/tmp/search_log.txt' overwrite into table myhive.test_load;
    

    在这里插入图片描述

这时候需要注意:

基于HDFS进行load加载数据,源数据文件会消失(本质是被移动到表所在的目录中)

在这里插入图片描述

可以看到HDFS当中的文件已经消失了,因为被移动到Hive的表当中去了

INSERT SELECT 操作

除了load加载外部数据外,我们也可以通过SQL语句,从其它表中加载数据。

语法:

INSERT [OVERWRITE | INTO] TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 FROM from_statement;

将SELECT查询语句的结果插入到其它表中,被SELECT查询的表可以是内部表或外部表。

注意,这种INSERT SELECT操作不管什么情况下,都会走mapReduce程序,导致数据加载很慢,在大数据量的情况下,效率与Load操作相似,但是小数据量的情况下,效率远低于Load

Hive导出数据

将hive表中的数据导出到其他任意目录,例如linux本地磁盘,例如hdfs,例如mysql等等

语法:

insert overwrite [local] directory ‘path’ select_statement1 FROM from_statement;
  • 将查询的结果导出到本地 - 使用默认列分隔符

    insert overwrite local directory '/export/test/' select * from test_load ;
    

    在这里插入图片描述

    可以看到文件已经导出了,但是呢,文件的分隔符是默认的分隔符,导致不方便查看,所以要改变分隔符格式

  • 将查询的结果导出到本地 - 指定列分隔符

    insert overwrite local directory '/export/test/' row format delimited fields terminated by '\t' select * from test_load;
    
    

    在这里插入图片描述

    现在分隔符这种方式已经很方便查看了。

  • 将查询的结果导出到HDFS上(不带local关键字)

    insert overwrite directory '/export/test/' row format delimited fields terminated by '\t' select * from test_load;
    

hive表数据导出 - hive shell

通过hive shell的方式直接导出到linux本地

## 将sql查询语句的结果,通过重定向符,写入到/export/test/export4.txt文件当中
bin/hive -e "select * from myhive.test_load;" > /export/test/export4.txt

bin/hive -f export.sql > /home/hadoop/export4/export4.txt

结尾

恭喜小伙伴完成本篇文章的学习,相信文章的内容您已经掌握得十分清楚了,如果您对大数据的知识十分好奇,请接下来跟着学习路径完成大数据的学习哦,相信你会做到的~~~

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

大数据从入门到精通文章体系!!!!!!!!!!!!!!

文章来源:https://blog.csdn.net/tyuiop321/article/details/132780827
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。