Hive其四,Hive的数据导出,案例展示,表类型介绍

目录

一、Hive的数据导出

1)导出数据到本地目录

2)导出到hdfs的目录下

3)直接将结果导出到本地文件中

二、一个案例

三、表类型

1、表类型介绍

2、内部表和外部表转换

3、两种表的区别

4、练习


一、Hive的数据导出

数据导出的分类:

1. 从hive表中导出本地文件系统中(目录、文件)

2. 从hive表中导出hdfs文件系统中

3. hive表中导出到其它hive表中

1)导出数据到本地目录

insert overwrite local directory '/root/out/00' select * from t_user;这个00不是文件名,而是文件夹的名字,没有可以自动创建

2)导出到hdfs的目录下

insert overwrite directory '/root/out/00' select * from t_user;

假如你导出的数据想要一个分隔符,比如 逗号

insert overwrite directory '/root/out/00' 
row format delimited fields terminated by ','
select * from t_user;

3)直接将结果导出到本地文件中

hive -e "sql语句"   不需要进入hive,直接执行hive的语句
hive -e "select * from  databaseName.t_user" >> /root/out/a.txt
hive -e "use databaseName;select * from  t_user" >> /root/out/a.txt

制表符就是 Tab 键,Tab 键就是 \t

二、一个案例

数据整理:emp.txt

7369,SMITH,CLERK,7902,1980-12-17,800,null,20
7499,ALLEN,SALESMAN,7698,1981-02-20,1600,300,30
7521,WARD,SALESMAN,7698,1981-02-22,1250,500,30
7566,JONES,MANAGER,7839,1981-04-02,2975,null,20
7654,MARTIN,SALESMAN,7698,1981-09-28,1250,1400,30
7698,BLAKE,MANAGER,7839,1981-05-01,2850,null,30
7782,CLARK,MANAGER,7839,1981-06-09,2450,null,10
7788,SCOTT,ANALYST,7566,1987-04-19,3000,null,20
7839,KING,PRESIDENT,null,1981-11-17,5000,null,10
7844,TURNER,SALESMAN,7698,1981-09-08,1500,0,30
7876,ADAMS,CLERK,7788,1987-05-23,1100,null,20
7900,JAMES,CLERK,7698,1981-12-03,950,null,30
7902,FORD,ANALYST,7566,1981-12-02,3000,null,20
7934,MILLER,CLERK,7782,1982-01-23,1300,null,10
3423,cfxj,MANAGER,8899,2022-01-01,50000,100000,40

根据数据的字段和格式,建表:

create table emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal int,
comm int,
deptno int
)
row format delimited 
fields terminated by ',';

加载数据:

load data local inpath "/home/hivedata/emp.txt" into table emp;

编写指标:

1、统计有领导的员工有哪些?
不完美
select * from emp where mgr is not null;
完美的写法:
select * from emp e1 where exists (select * from emp e2 where e2.empno = e1.mgr);还有其他写法:
select * from emp where mgr in (select distinct empno from emp);2、统计每个部门的员工的总工资和总薪水是多少?
select sum(sal),sum(comm+sal),deptno from emp group by deptno;8750    NULL    10
10875   NULL    20
9400    7800    30
50000   150000  40
Time taken: 1.965 seconds, Fetched: 4 row(s)null + 任何数字 结果为null
需要一个函数 IFNULL(mysql中的函数),在hive中的对应的函数是nvl
select sum(sal),sum(nvl(comm,0)+sal),deptno from emp group by deptno;

Hive中的函数是非常重要的,课下多留意,积累!

三、表类型

1、表类型介绍

内部表:

表面来看,我们建的所有的表,默认都是内部表,内部表又叫做管理表,它的位置也很固定/user/hive/warehouse下面。

外部表:

创建的时候需要加关键字external 修饰,而且,外部表它的数据的存储位置可以不在/user/hive/warehouse,可以指定位置。

建表的语法格式:

 create external table tableName(id int,name string) [location 'path'];

举例:

create external table t_user7(
id int,
name string
)
row format delimited
fields terminated by ','
location '/publicData'这个location 是本地的意思还是hdfs的路径呢?答案是必须在hdfs上。

2、内部表和外部表转换

内部表转外部表

desc extended t_user; 查看表结构的详细信息

alter table tableName set tblproperties('EXTERNAL'='TRUE');

注意:内部表转外部表,true一定要大写;

外部表转内部表

alter table tableName set tblproperties('EXTERNAL'='false');

说明:false不区分大小

3、两种表的区别

用的最多的都是外部表,因为可以分析数据(OLAP)。

OLAP: 为分析而生的数据库 A(分析)

OLTP: 存储数据,保证数据的安全。 T(事务的意思)

最大的区别就是删除表的时候,内部表会删除元数据和真正的hdfs上的数据。而外部表只删除元数据。

思考:为什么这么做?

Hive是一个数据分析的工具,存储数据不是它的本意。

假如一个人,将数据上传至hdfs,这个数据量很大,一般不挪动位置,你可以建一个外部表数据的位置指向hdfs的某个文件夹,然后就可以分析了。

/home a.txt 2G

建一个外部表,指向/home/a.txt , 分析完毕之后,删除表就可以了,干嘛要删除数据,没必要。--用后即焚!

微信小程序--> 阅后即焚。

1) 内部表和外部表在创建时的差别

就差两个关键字,EXTERNAL 和 LOCATION 举例:

- 内部表 -- CREATE TABLE T_INNER(ID INT);

- 外部表 -- CREATE EXTERNAL TABLE T_OUTER(ID INT) LOCATION 'HDFS:///AA/BB/XX';

2) Hive表创建时要做的两件事:

1、在hdfs下创建表目录

2、在元数据库mysql创建相应表的描述数据(元数据)

3) drop时有不同的特性:

1、drop时,元数据都会被清除

2、drop时,内部表的表目录会被删除,但是外部表的表目录不会被删除。

4) 使用场景

内部表: 平时用来测试或者少量数据,并且自己可以随时修改删除数据.

外部表:使用后数据不想被删除的情况使用外部表(推荐使用)所以,整个数据仓库的最底层的表使用外部表。

4、练习

创建不存在的文件夹  
hdfs dfs -mkdir -p /user/hdfs/source/out_table
接着创建一个外部表
create external table out_table (id int,name string
)
row format delimited
fields terminated by ','
location '/user/hdfs/source/out_table';加载数据:load data local inpath '/home/hivedata/user.txt' into table out_table;

查看数据存放的位置:

drop table out_table;

发现数据依然存在:

假如我再创建一个表,数据指向这个文件夹,表中是否会有数据?

create external table student (sid int,sname string
)
row format delimited
fields terminated by ','
location '/user/hdfs/source/out_table';

查看表数据,数据即可出现,根本不需要导入操作

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用RKNN进行YOLOv8人体姿态估计的实战教程:yolov8-pose.onnx转yolov8-pose.rknn+推理全流程

之前文章有提到“YOLOv8的原生模型包含了后处理步骤,其中一些形状超出了RK3588的矩阵计算限制,因此需要对输出层进行一些裁剪”,通过裁剪后得到的onnx能够顺利的进行rknn转换,本文将对转rnkk过程,以及相应的后处理进行阐述。并在文末附上全部源码、数据、模型的百度云盘链…

怎么用Java写一个数据库?详细的步骤流程

在 Java 中编写一个与数据库交互的程序通常涉及以下几个步骤: 选择数据库和驱动:首先需要选择一个数据库(如 MySQL、PostgreSQL、SQLite 等),并确保安装了该数据库和相应的 JDBC 驱动。 创建数据库连接:使用 JDBC(Java Database…

Pytorch | 利用NI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用NI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集NI-FGSM介绍背景算法流程 NI-FGSM代码实现NI-FGSM算法实现攻击效果 代码汇总nifgsm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器: Pytorch | 从零构建AlexNet对CIFAR10进行…

继承详细总结

一.继承的定义与概念 1.定义:继承是一种is-a的关系,例如,哺乳动物是动物,狗是哺乳动物,因此,狗是动物,等等。 2.允许我们在保持原有类特性的基础上进行扩展,增加方法(成员函数) 和 属…

批量多线程给TXT文档插入相关腾讯AI【高质量无水印无版权】原创图片

给蜘蛛访问的网站文章插入相关图片,可以带来以下好处: ‌1、提升用户体验‌:图片能够直观地展示文章内容,帮助用户更好地理解和消化信息。对于阅读者来说,图文并茂的内容往往更具吸引力,也能提高他们的阅读…

牵手红娘:牵手App红娘助力“牵手”,脱单精准更便捷

随着互联网的普及,现代青年的社交圈层加速扩大,他们的恋爱观也正经历着前所未有的转变。在繁忙的工作之余,人们希望能够找到一种既高效又真诚的交友方式。于是,线上交友平台成为了他们寻找爱情的新选择。让不同文化背景、不同工作…

STM32-笔记12-实现SysTick模拟多线程流水灯

1、前言 正常STM32实现多线程,需要移植一个操作系统FreeRTOS。但是在这里不移植FreeRTOS怎么实现多线程呢?使用SysTick,那么怎么使用SysTick来模拟多线程呢?前面我们知道SysTick就是一个定时器,它不是在主函数的while循…

麒麟信安受邀出席开放原子园区行暨供需对接活动,分享基于关基领域打造的行业解决方案

12月17日,武汉市经信局和开放原子开源基金会共同主办开放原子园区行暨供需对接活动,旨在推进武汉市开源体系建设,推动开源技术赋能千行百业。活动吸引了武汉市委金融办、市卫健委、疾控中心、医保局、信息中心(大数据中心)、市红十字会、银行…

Everspin代理MR25H10CDFR存储MRAM

RAMSUN提供的MR25H10CDFR是一款具备1,048,576位存储容量的磁阻随机存取存储器(MRAM)设备,由131,072个8位字构成。该设备提供与串行EEPROM和串行闪存兼容的读/写时序,无写延迟,并且其读/写寿命是不受限制的。 与其它串…

golang 并发--goroutine(四)

golang 语言最大的特点之一就是语法上支持并发,通过简单的语法很容易就能创建一个 go 程,这就使得 golang 天生适合写高并发的程序。这一章节我们就主要介绍 go 程,但是要想完全理解 go 程我们需要深入研究 GPM 模型,关于 GPM 模型…

三维模型中的UV展开是什么意思?它有什么优势?

UV展开涉及将三维模型的表面展开为一个或多个二维区域,以便将纹理图像正确地映射到模型上。这个过程类似于将一个立体物体的表面切割并平铺开来。UV坐标是用于在二维纹理图像中定位颜色和细节的坐标系统,U和V分别代表纹理图像的水平和垂直轴。 UV展开它…

SpringAI人工智能开发框架006---SpringAI多模态接口_编程测试springai多模态接口支持

可以看到springai对多模态的支持. 同样去创建一个项目 也是跟之前的项目一样,修改版本1.0.0 这里 然后修改仓库地址,为springai的地址 然后开始写代码

JSON 系列之1:将 JSON 数据存储在 Oracle 数据库中

本文为Oracle数据库JSON学习系列的第一篇,讲述如何将JSON文档存储到数据库中,包括了版本为19c和23ai的情形。 19c中的JSON 先来看一下数据库版本为19c时的情形。 创建表colortab,其中color列的长度设为4000。若color的长度需要设为32767&a…

hhdb客户端介绍(51)

功能模块设计 数据可视化与报表 报表生成 基于数据库中的数据,允许用户创建自定义报表,可选择报表的数据源(表、视图或查询结果)、报表布局(表格、图表等)、字段显示、分组与汇总方式等,满足…

SOME/IP 协议详解——信息格式

文章目录 1. 头部格式1.1 消息 ID(Message ID)1.2 长度(Length)1.3 请求 ID(Request ID)1.4 协议版本(Protocol Version):1.5 接口版本(Interface Version&am…

Spring学习(一)——Sping-XML

一、Spring的概述 (一)什么是Spring? Spring是针对bean对象的生命周期进行管理的轻量级容器。提供了功能强大IOC、AOP及Web MVC等功能。Spring框架主要由七部分组成:分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 S…

用 gdbserver 调试 arm-linux 上的 AWTK 应用程序

很多嵌入式 linux 开发者都能熟练的使用 gdb/lldb 调试应用程序,但是还有不少朋友在调试开发板上的程序时,仍然在使用原始的 printf。本文介绍一下使用 gdbserver 通过网络调试开发板上的 AWTK 应用程序的方法,供有需要的朋友参考。 1. 下载 …

ubuntu 24.04-无域名创建本机和局域网和同网段局域网机器可访问的https网页服务

1. 安装nginx, apt install nginx apt install nginx 2. 创建nginx.conf配置文件: gedit /etc/nginx/nginx.conf 3. 配置文件内容如下: user snake; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid;# L…

树莓派换源

查询自己版本: lsb_release -a bullseye可以理解为树莓派的系统代号(10,11,12都不同,一定要看好自己系统是什么版本) 查询架构 uname -a aarch64的地方就是代表系统架构的,我的是aarch64的架…

SMMU软件指南SMMU编程之虚拟机结构和缓存

安全之安全(security)博客目录导读 目录 一、虚拟机结构(VMS) 二、缓存 一、虚拟机结构(VMS) 虚拟机结构(VMS)是SMMU中的概念,是一个由STE.VMSPtr字段指向的结构,包含每个虚拟机的配置设置。在相同安全状态下具有相同虚拟机ID(VMID)的多个STE必须指向相同的VMS。…