Python大数据之Hadoop学习——day06_hive内外部表

embedded/2024/10/18 18:14:06/

一.hive内外表操作

1. 建表语法

create [external] table [if not exists] 表名(字段名 字段类型 ,字段名 字段类型,...)

[partitioned by (分区字段名 分区字段类型)]        # 分区表固定格式

[clustered by (分桶字段名) into 桶个数 buckets]        # 分桶表固定格式

[sorted by (排序字段名 asc|desc)]

[row format delimited fields terminated by '字段分隔符' ]        # 自定义字段分隔固定格式

[stored as textfile]        # 默认即可

[location 'hdfs://域名:8020/user/hive/warehouse/库名.db/表名'] # 默认即可

; # 注意: 最后一定加分号结尾

2. 数据类型

基本数据类型:

整数        int

小数        float double

字符串        string varchar

时间        date timestamp

3. 表分类

Hive中可以创建的表有好几种类型,分别是:

内部表(管理表或者托管表)

外部表(非管理表或者非托管表)

二.内部表基本操作

1. 知识点

创建内部表:create table [if not exists] 内部表名(字段名 字段类型,字段名 字段类型...)

[row format delimited fields terminated by '字段分隔符'];

复制内部表:方式1:like方式复制表结构        方式2:as方式复制表结构和数据

删除内部表:drop table 内部表名;

        注意:删除内部表效果是mysql中表的相关元数据被删除,同时存储在hdfs中业务数据本身也被删除

查看表格式话信息:desc formatted 表名;

-- 内部表类型:MANAGED_TABLE

注意:还可以使用truncate清空内部表数据        格式:truncate table 内部表名

三. 外部表基本操作[练习]

1. 知识点

创建外部表:create external table [if not exists] 外部表名(字段名 字段类型,字段名 字段类型,...)[row format delimited fields terminated by '字段分隔符'];

复制表:方式1:like方式复制表结构

注意:as 方式不可以使用

删除外部表:drop table 外部表名

注意:删除外部表效果是mysql中元数据被删除,但是存储在hdfs的业务数据本身被保存

查看表格式化信息:desc formatted 表名;

-- 外部表类型:EXTERNAL_TABLE

注意:外部表不能使用truncate清空数据本身

四 .查看/修改表

1. 知识点

查看所有表:show tables;

查看建表语句:show create table 表名;

查看表信息:desc 表名;

查看表结构信息:desc 表名;

查看表格式化信息:desc formatted 表名;        注意:formatted能够展示详细信息

修改表名:alter table 旧表名rename to 新表名

字段添加:alter table 表名 add columns (字段名 字段类型);

字段的替换:alter table 表名 replace columns (字段名 字段类型,...)

字段名和字段类型同时修改:alter table 表名 change 旧字段名 新字段名 新字段类型;

注意:字符串类型不能直接改数值类型

修改表路径:alter table 表名 set location ‘hdfs中存储路径’;

修改表属性:alter table 表名 set tblproperties('属性名'=‘属性值’)

五.默认分隔符

1.知识点:

创建表的时候,如果不指定分隔符,以后表只能识别默认的分隔符

一般为:\0001,SOH,^A,□

六.快速映射表

1. 知识点:

创建表的时候指定分隔符:create [external] table 表名(字段名 字段类型) row format delimited fields terminated by 符号;

加载数据:load data [local] inpath '结构话数据文件' into table 表名;

七.数据导入和导出

文件数据加载导入
1.直接上传文件

window页面上传

linux本地put上传

hdfs dfs -put 文件 路径

2.load加载文件:

从hdfs路径把文件移动到表对应存储路径中:

load data inpath 'HDFS文件路径' [overwrite] into table 表名;

从linux本地把文件上传到表对应存储路径中:

load data local inpath 'Linux文件路径' [overwrite] into table 表名;

3.insert插入数据

从其他表查询数据'追加'插入到当前表中:insert into [table] 表名 select 语句;

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

文件数据导出
1.直接下载文件

web页面下载

get命令下载文件

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

[root@node1 binzi]# hdfs dfs -get /user/hive/warehouse/hive02.db/search_log/search_log.txt /binzi
2. insert导出数据

查询数据导出到hdfs其他路径:insert overwrite directory 'hdfs存储该数据路径' select语句;

查询数据导出到linux本地中:insert overwrite local directory 'linux存储该数据路径' select语句;

注意:  overwrite默认是覆盖重写,所以在指定存储该数据路径的时候尽量指定一个空的目录

注意: 导出数据的时候不指定分隔符采用默认分隔符SOH,0001,?...

导出数据指定分隔符添加:row format delimite fields terminated by ‘分隔符’

3.hive_shell命令

hive命令执行sql语句:  hive -e "sql语句" > 存储该结果数据的文件路径

hive命令执行sql脚本:  hive -f sql脚本文件 > 存储该结果数据的文件路径

hql语句导出

# 以下命令都是在linux的shell命令行执行
# 3.1使用hive -e sql语句方式导出数据
[root@node1 ~]# hive -e 'select * from hive02.search_log;' > /home/hs1.txt
[root@node1 ~]# cat hs1.txt

hql语句

# 3.2使用hive -f 脚本文件方式导出数据
[root@node1 ~]# echo 'select * from hive02.search_log;' > /home/export.sql
[root@node1 ~]# hive -f export.sql > /home/hs2.txt
[root@node1 ~]# cat hs2.txt


http://www.ppmy.cn/embedded/105507.html

相关文章

<数据集>车辆识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:3002张 标注数量(xml文件个数):3002 标注数量(txt文件个数):3002 标注类别数:21 标注类别名称:[ambulance, army vehicle, auto rickshaw, bicycle, bus, car, garba…

Java JVM 垃圾回收算法详解

Java 虚拟机(JVM)是运行 Java 应用程序的核心,它的垃圾回收(Garbage Collection, GC)机制是 JVM 中非常重要的一个部分。垃圾回收的主要任务是自动管理内存,回收那些不再被使用的对象,从而释放内…

git修改提交名字

大家在使用git的时候,有的时候可能不是使用自己的账号,或者说账号的信息不符合自己的预期,具体表现在什么地方呢?在提交代码的时候,名字不是自己的,或者是名字不是自己想要的。 下面就是如何查看和修改。 …

C#复习之封装_静态成员

知识点一 静态成员的基本概念 知识点二 早已出现的静态成员 知识点四 静态成员的使用 知识点五 为什么可以直接点出来 //记住! //程序中是不能无中生有的 //我们要使用的对象,变量,函数都是要在内存中分配内存空间的 //之所以要实例化对象…

【教程】MySQL数据库学习笔记(六)——数据查询语言DQL(持续更新)

写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 第三章 《数据定义语言DDL》 第四章 《数据操…

51单片机.之 UART串口

备 注:只当接收到大写字符’B’后改变蜂鸣器的开/关状态 /* ******************************************************************************* * 《手把手教你学51单片机(C语言版)》 * 配套 KST-51 单片机开发板 示例源…

Python读取Excel数据教程 - 详细版

好的,让我们更加详细地探讨如何使用Python读取Excel数据,并提供更多的细节和示例。 Python读取Excel数据教程 - 详细版 1. 引言 在日常工作中,Excel 是一种广泛使用的工具,特别是在财务、统计和业务分析领域。Python 提供了多种…

Leetcode每日刷题之30.串联所有单词的子串

1.题目解析 本题的题目要求给出一个字符串 s 与一个字符数组 words ,并且 words 中的所有单词长度均相同,我们要寻找出 s 中是否存在子串符合 words 中单词的任意组合而成,注意重要的一点是 words 中的所有单词的长度均相同,这是解…