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

ops/2024/12/26 9:58:38/

目录

一、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.ppmy.cn/ops/145095.html

相关文章

【C++】初识C++之C语言加入光荣的进化(上)

写在前面 本篇笔记作为C的开篇笔记,主要是讲解C关键字(C98)连带一点点(C11)的知识。掌握的C新语法新特性,当然C是兼容C的,我们学习C的那套在C中也是受用。 文章目录 写在前面一、命名空间域1.1、命名空间域的定义与使用1.2、命名空间域的细节…

基于3D-Speaker进行区分说话人项目搭建过程报错记录 | 通话录音说话人区分以及语音识别 | 声纹识别以及语音识别 | pyannote-audio

0. 研究背景 在外呼系统中,我们的后台管理系统通常要对电话录音的内容进行提取和分析。那么说到分析,我们就要对录音中的两个人的对话进行分离,然后分别分析,比如分析客户是否有合作的意愿,分析客服讲的话术是否合理&…

如何在 Ubuntu 22.04 上安装和使用 Composer

简介 如果你是一名 PHP 开发者,想要简化你的项目依赖管理,那么 Composer 是一个必不可少的工具。Composer 可以简化包管理,并允许你轻松地将外部库集成到你的项目中。 本教程将向你展示如何在 Ubuntu 22.04 操作系统上安装 Composer&#x…

Pytorch分布式训练

现在深度学习模型占用显存大,数据量也大,单张显卡上训练已经满足不了要求了,只有多GPU并行训练才能加快训练速度;并行训练又分为模型并行和数据并行两种。模型并行比较少用到,这里主要介绍数据并行,pytorch…

4-3 MCU中ARM存储器的作用

定义:在讨论单片机中的“ARMZ”时,看起来可能存在一些混淆。通常情况下,我们不会直接提到“ARMZ”作为单片机存储内容的描述。可能你指的是某种特定的存储器或寄存器,或者是关于ARM架构下的某种概念。为了更准确地回答你的问题&am…

【Rust自学】6.1. 定义枚举

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 6.1.1. 什么是枚举 枚举允许我们列举所有可能的值来定义一个类型。这与其他编程语言中的枚举类似,但 Rust 的枚举更加灵活和强…

ubuntu使用ffmpeg+ZLMediaKit搭建rtsp推流环境

最方便的方式,ubuntu上安装vlc播放器,通过vlc来推流,在网上有很多教程。这里采用ffmpegZLMediaKit 必备条件: 1、安装ffmpeg 2、安装ZLMediaKit 一、安装ffmpeg sudo apt update sudo apt install ffmpeg 二、安装ZLMediaKit…

[Python3] Sanic中间件

在 Sanic 中,中间件(middleware)是指在请求和响应之间执行的代码。它们是一个非常强大的工具,用于处理请求的预处理、响应的后处理、全局错误处理、日志记录、认证、权限校验、跨域资源共享(CORS)等任务。中…