摸鱼大数据——Hive表操作——文件数据的导入和导出

数据导入和导出

1、文件数据导入
1.1 直接上传文件
  • window页面上传

需求: 已知emp1.txt文件在windows/mac系统,要求使用hdfs保存此文件 并且使用hivesql建表关联数据

use day06;
​
-- 1- 创建Hive表
create table emp1 (
    id int,
    name string,
    salary int,
    dept string
)row format delimited fields terminated by ',';
​
-- 2- 通过浏览器界面将数据上传到HDFS
​
-- 3- 将HDFS上的数据文件加载到Hive中
load data inpath '/emp1_dir' into table emp1;
​
-- 4- 数据验证
select * from emp1;
​
​
-- load数据的特殊演示
-- 1- 建表
create table emp111 (
    id int,
    name string,
    salary int,
    dept string
)row format delimited fields terminated by ',';
​
-- 2- 通过HDFS的shell命令移动/复制数据文件到表的目录下
-- hdfs dfs -cp /user/hive/warehouse/day06.db/emp1/emp1.txt /user/hive/warehouse/day06.db/emp111/emp2.txt
select * from emp111;

  • linux本地put上传

需求: 已知emp2.txt文件在linux系统,要求使用hdfs保存此文件 并且使用hivesql建表关联数据

use day06;

-- 1- 创建Hive表
create table emp2 (
    id int,
    name string,
    salary int,
    dept string
)row format delimited fields terminated by ',';

-- 2- 通过命令或者界面将windows上的文件先上传到linux
-- rz

-- 3- 通过命令linux上的文件上传到HDFS,并且上传到表数据所在的目录
-- hdfs dfs -put emp2.txt /user/hive/warehouse/day06.db/emp2
-- hdfs dfs -ls /user/hive/warehouse/day06.db/emp2

-- 4- 验证数据
select * from emp2;

1.2 load加载文件
从hdfs路径把文件移动到表对应存储路径中: load data inpath '文件路径' [overwrite] into table 表名称;
​
从linux本地把文件上传到表对应存储路径中: load data local inpath '文件路径' [overwrite] into table 表名称;

  • load移动HDFS文件

use day06;
​
-- 创建Hive表
-- \t表示的是制表符
create table search_log(
    dt string,
    uid string,
    name string,
    url string
)row format delimited fields terminated by '\t';
​
-- HDFS文件演示
-- 将windows本地文件上传到HDFS的非Hive表所在的目录
load data inpath '/dir/search_log.txt' into table search_log;
select * from search_log;

  • load上传Linux文件

-- Linux本地文件演示
load data local inpath '/home/search_log.txt' into table search_log;
select * from search_log;

load上传Linux文件并且使用overwrite

-- Linux本地文件演示,并且带上overwrite
-- overwrite效果:先清空表中的原有数据,然后是新数据填充
load data local inpath '/home/search_log.txt' overwrite into table search_log;
select * from search_log;

1.3 insert插入数据
从其他表查询数据'追加'插入到当前表中: insert into table 表名 select查询语句;
​
从其他表查询数据'覆盖'插入到当前表中: insert overwrite table 表名 select查询语句;

  • insert追加数据

use day06;
​
-- 创建Hive表
-- \t表示的是制表符
create table search_log_copy(
    dt string,
    uid string,
    name string,
    url string
)row format delimited fields terminated by '\t';
​
select * from search_log_copy;
​
-- 通过insert select 语句加载其他表中的数据到当前表中
insert into table search_log_copy select * from search_log;
​
select * from search_log_copy;

  • insert覆盖数据

-- insert overwrite覆盖数据
insert overwrite table search_log_copy select * from search_log;
​
select * from search_log_copy;

总结:
1- 如果文件就在windows上面,可以通过直接上传文件的方式
2- 如果文件在linux操作系统上面,可以选择直接上传文件或者load加载文件
3- 如果我们是需要从其他表中将数据复制到我自己的表中,可以使用insert插入数据

2、文件数据导出
2.1 直接下载文件
  • web页面下载

需求: 已知search_log.txt文件在HFDS的/user/hive/warehouse/day06.db/search_log路径下,要下载到window系统

  • get命令下载文件

需求: 已知search_log.txt文件在HFDS的/user/hive/warehouse/day06.db/search_log路径下,要下载到linux系统

[root@node1 home]# hdfs dfs -get /user/hive/warehouse/day06.db/search_log/search_log.txt .

2.2 insert导出数据
查询数据导出到hdfs其他路径: insert overwrite directory 'HDFS路径' select语句;
​
查询数据导出到linux本地中: insert overwrite local directory 'Linux路径' select语句;
​
注意:
    1- overwrite会覆盖掉路径中已有的文件,千万注意。推荐指定一个新的空目录
    2- 如果不指定分隔符,导出的文件中使用默认的Hive分隔符\001
​
导出数据指定分隔符添加(以HDFS为例): 
insert overwrite directory '/dir'
row format delimited fields terminated by ','
select * from search_log;

  • insert导出到hdfs

use day06;
​
-- 将Hive表数据导出到HDFS的路径下
-- overwrite:会覆盖指定目录中文件
insert overwrite directory '/dir' select * from search_log;
​
-- 指定分隔符
insert overwrite directory '/dir'
row format delimited fields terminated by ','
select * from search_log;

  • insert导出linux

-- 将Hive表数据导出到Linux的路径下
insert overwrite local directory '/home'
row format delimited fields terminated by ','
select * from search_log;

2.3 hive_shell命令
hive命令执行sql语句: hive -e "Hive 语句">存储该结果数据的Linux文件路径
​
hive命令执行sql脚本: hive -f hivesql文件>存储该结果数据的Linux文件路径
  • hql语句导出

hive -e "select * from day06.search_log">/home/1.txt

hql脚本导出

[root@node1 home]# cat my_sql.sql 
select * from day06.search_log

hive -f my_sql.sql > /home/2.txt

  • 总结

    1- 如果SQL语句比较简单,SQL的行数在3行以内,可以使用hive -e

    2- 如果SQL语句比较复杂,推荐使用hive -f

2.4 总结
1- 如果数据在Hive表的某一个文件中,可以使用直接下载文件的方式
2- 如果想将Hive表中的数据导出到HDFS路径,推荐使用insert overwrite导出命令
3- 如果只是想将Hive表中的数据导出到linux路径,可以使用insert overwrite导出命令或者hive sell命令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/652873.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CUDA_VISIBLE_DEVICES‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

问题: 命令行出现CUDA_VISIBLE_DEVICES0 python trainer.py这种命令 这是Linux可以的,但是Windows不行。 解决方案: 这条命令的含义是指定某个GPU来运行程序,我们可以在程序开头添加指定GPU的代码,效果是一样的&…

xLSTM——解析扩展长短期记忆的网络算法与应用

1.概述 二十多年来, 塞普霍赫赖特 创举 长短期记忆 (LSTM) 架构在许多深度学习突破和实际应用中发挥了重要作用。从生成自然语言到为语音识别系统提供动力,LSTM 一直是人工智能革命背后的驱动力。 然而,即使是 LSTM 的创建者也认识到它们固…

【Sql Server】随机查询一条表记录,并重重温回顾下存储过程的封装和使用

大家好,我是全栈小5,欢迎来到《小5讲堂》。 这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言随机查询语…

Visual Studio +Resharp,让你在C#编程界一骑绝尘!【文末送2024C#入门到精通教程视频+源码C#.NET全栈开发高级VIP班[完结】

目录 前言 一、Visual Studio:C#开发的强大后盾 二、ReSharper:智能代码编辑器的典范 三、Visual Studio ReSharper:一骑绝尘的编程组合 四、如何发挥最大效能 五、结论 文末福利: 文末有福利 前言 在C#编程领域&#x…

情感分析及数据集代码解析

15.1. 情感分析及数据集 — 动手学深度学习 2.0.0 documentation (d2l.ai) 代码 import os import torch from torch import nn from d2l import torch as d2l#save d2l.DATA_HUB[aclImdb] (http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz,01ada507287d828…

【Altium Designer】安装教程

一、软件下载 二、软件安装 三、授权文件激活 一、软件下载 Altium Designer官网下载 二、软件安装 1.解压完下载好的软件,鼠标右击【OfflineSetup_Altium_Designer_Public_24_5_1】安装程序,选择【以管理员身份运行】。 2.语言选择【Chinese】&#…

如何向《大众日报》理论稿投稿?

《大众日报》是山东省委机关报,其理论版是该报的重要版面之一,主要刊登关于政治、经济、文化、社会等方面的理论文章和研究成果。 - 投稿方式:通常可以通过电子邮件或在线投稿系统向《大众日报》理论版投稿。 - 选题范围:理论版…

回收站删掉的照片还能找回来吗?掌握这5个方法,很简单!

“我一不小心在回收站中误删了一些照片,这些照片对我来说是比较重要的,不知道这些还有机会将它们找回来吗?” 当我们不小心将珍贵的照片从计算机的回收站中误删时,那种瞬间的心痛和焦虑难以言表。这些照片可能记录了我们生活中的重…

kafka-生产者发送消息消费者消费消息

文章目录 1、生产者发送消息&消费者消费消息1.1、获取 kafka-console-producer.sh 的帮助信息1.2、生产者发送消息到某个主题1.3、消费主题数据 1、生产者发送消息&消费者消费消息 1.1、获取 kafka-console-producer.sh 的帮助信息 [rootlocalhost ~]# kafka-console…

解决mybatis/mybatis plus报错:Invalid bound statement (not found) 的方法汇总

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题,即在mybatis中dao接口与mapper配置文件在做映射绑定的时候接口与xml不匹配,要么是找不到,要么是找到了却匹配不到。 我的问题是项目没有把最新的方法x…

上海冠珠旗舰总店盛装开业暨冠珠瓷砖中国美学设计巡回圆满举办

上海,这座融合了东西方文化的国际化大都市,不仅是中国的时尚中心,也是全球潮流的汇聚地。在这里,古典与现代交织,传统与前卫并存,为传统色彩与现代设计的融合提供了得天独厚的条件。 5月25日,上…

svix - webhooks

文章目录 一、关于 SvixClient Library Overview与 Svix 托管服务的区别 二、运行服务器1、部署1.1 Docker1) 使用 Docker Compose2) 独立容器 1.2 预编译的二进制文件1.3 从源代码构建 2、运行时依赖项3、Redis/Valkey 注意事项持久性 Eviction 政策4、服务器配置4.1 配置文件…

红队技巧:仿冒Windows登录

Metasploit框架:phish_windows_credentials Metasploit带有内置的后期漏洞利用功能,可帮助我们完成任务。由于它是后渗透的模块,因此只需要输入会话即可: use post/windows/gather/phish_windows_credentials set session 1 …

WebGL学习(一)渲染关系

学习webgl 开发理解渲染关系是必须的,也非常重要,很多人忽视了这个过程。 我这里先简单写一下,后面尽量用通俗易懂的方式,举例讲解。 WebGL,全称Web Graphics Library,是一种在网页上渲染3D图形的技术。它…

【链表】Leetcode 61. 旋转链表【中等】

旋转链表 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 示例 1: 输入:head [1,2,3,4,5], k 2 输出:[4,5,1,2,3] 解题思路 要将链表每个节点向右移动 k 个位置: 计算链表…

Leetcode3161. 物块放置查询(Go语言的红黑树 + 线段树)

题目截图 题目分析 每次1操作将会分裂成两块区间长度,以最近右端点记录左侧区间的长度即可 因此涉及到单点更新和区间查询 然后左右侧最近端点则使用redBlackTree,也就是python中的sortedlist ac code type seg []int// 把 i 处的值改成 val func (t …

Spark-RDD-常用算子(方法)详解

Spark概述 Spark-RDD概述 Spark RDD 提供了丰富的方法来对数据进行转换和操作。 对 RDD(Resilient Distributed Dataset)的操作可以分为两大类:转换算子(Transformations)和行动算子(Actions)…

无线领夹麦克风哪个品牌好?本期文章揭秘无线麦克风哪个品牌好用

​在当下这个全民皆为媒体的时代大潮中,视频分享已然成为了引领风尚的指向标。在自媒体领域竞争愈发激烈的态势下,若要在这片广阔海洋中扬帆远航,优秀的作品毫无疑问是吸引观众的关键所在。而想要塑造出这样的卓越之作,除了需要创…

java —— 异常处理

一、认识异常 java 中的异常大致分为三类:编译错误、逻辑错误、运行异常。其中编译错误和逻辑错误通常手动更改即可,运行异常是异常处理的主要内容。 java 中的异常全部继承自 Exception 类,其常见的子类如下: 查看异常&#xf…

vscode常用操作

1 vscode跳转node_modules下文件,没有切换定位到左侧菜单目录的问题 2,搜索node-modules 3,设置选中字体颜色 {"workbench.colorTheme": "Default Light Modern","editor.mouseWheelZoom": true,"termin…