Hive数据表操作--学习笔记

1,Hive数据表操作

1,建表语句和内外部表
①创建内部表

create [external] table [if not exists] 表名(
字段名 字段类型 [comment '注释'],
字段名 字段类型 [comment '注释'],
...
)
[row format delimited
fields terminated by '指定分隔符'];

(1)直接使用create table创建表时默认创建内部表,而当添加external后,表示创建外部表;
(2)当要查看表类型与详细信息时,使用语法[desc formatted 表名;];
2,外部表(EXTERNAL_TABLE)
外部表(External),是指被external关键字修饰的表, 也可称为关联表。
要创建一个外部表,需要添加external关键字,语法:

create external table 数据表名 ......[location]......

1.1,请说一说内部表和外部表有什么区别?

在Hive中,内部表和外部表的区别主要有如下几点:
1,通过external关键字区分,内外部表
内部表:内部表直接使用create table 内部表名 的形式创建即可
外部表:外部表需要使用external 关键字来修饰,因此创建外部表语法时,create external table table 外部表名
2,内部表和外部表再Hive中的管理范围不一样
内部表:表类型表示为Manage_table ,Hive在管理内部表时当使用drop删除表,既能删除内部表的元数据,也能删除在HDFS中的实际数据,因此,Hive能完全控制和管理内部表,所以内部表也可以称为管理表
外部表:表类型表示为,external_taable,Hive在管理外部表时,只能删除元数据信息,而不能删除HDFS中的实际数据,当使用drop删除外部表时,只能删除外部表的元数据,而不能删除外部表位于HDFS中的真实数据,因此,Hive仅能管理外部表的部分内容,所以外部表也可以称为关联表。
3,更改表结构与两类表操作有所不同
内部表:更改内部表结构时,HDFS中可以同步更改数据结果;
外部表:当对外部表更改结构后,HDFS中不能立马同步结果,而需要进行对外部表进行修复操作;
4,存储路径可能不同
内部表:当在设计内部表时,一般对于存储路径是默认的,即/user/hive/warehose目录下;
外部表:一般在创建外部表时,为了数据的安全,可能会设定存储路径名。
以上就是我对内部表和外部表区别的一些个人理解。
3,字段类型
对于字段类型,整体可以分为两个大类别:
(1)原生数据类型(primitive data type)
原生数据类型包括:数值类型、时间类型、字符串类型、杂项数据类型;
在原生数据类型中,较为常见的有:int、double、string、varchar、timestamp、
date。
(2)复杂数据类型(complex data type)
复杂数据类型包括:array数组、map映射、struct结构、union联合体。
4,关于Hive的数据类型,需要注意:
(1)Hive的数据类型不区分大小写,或者说对大小写不敏感;
(2)除SQL数据类型外,还支持Java数据类型,比如string;
(3)int和string是使用最多的,大多数函数都支持;
(4)复杂数据类型的使用时,通常需要和分隔符指定语法并配合使用;
(5)如果定义的数据类型和文件不一致,hive会尝试自动转换类型,但是不保证成
功。

1.2 创建表

(1)创建表 create
(2)查看表 desc/show
(3)删除表 drop
(4)修改表 alter
1,默认分隔符
默认分隔符应该是:“\001”。在某些文本编辑器中,这类特殊符号会显示为SOH。
2,常见的建表语句
(1)基于查询结果建表
create table 表名 as select 语句;
(2)基于已存在的表结构建表(相当于复制一张和已存在的表一摸一样的表)
create table 表名 like 已存在的表名;

-- 了解快速建表操作
create table computer(
brand string,
price double,
size int
) row format delimited
fields terminated by "\t";
insert into computer values ("苹果",19999.99,8);
-- _copy
create table phone_copy as select * from phone;
create table computer_copy like computer;

1.3查看表与删除表

(1)查看表
在Hive中,DESC TABLE语句可用于显示Hive中表的元数据信息。

-- 查看字段基本信息
desc [数据库名.]表名;
-- 以序列化形式查看字段更多信息
desc extended [数据库名.]表名;
-- 以表格形式查看字段所有信息
desc formatted [数据库名.]表名;

(2)删除表
drop table 表名;
当使用删除表命令删除内部表时,元数据及数据表内容等都会删除。

1.4修改表

(1)添加一列
给数据表添加一列新字段,

alter table 表名 add columns(字段名 数据类型);

(2)修改字段名
当数据表的某字段名有误时,可以修改字段名,语法

alter table 表名 change 原字段 新字段名 类型;

(3)修改表名
一般地,给数据表命名时一般会添加前缀tb或tbl或table字样。语法:

alter table 表名 rename to 新的表名;

(4)修改表位置路径
也可以修改表的存储位置,语法:

alter table 表名 set location '路径';

1.5操作内部表数据

在Hive中的内部表操作数据,语法:
(1)插入数据
insert into 表名[(字段名, 字段名, …)] values(值, 值, …);
(2)查看数据
select * from 表名;
(3)清空数据
truncate table 表名;

-- ------------------操作数据--------------------------
use sz41db_machine;
create table teacher(
id int,
name string,
gender string
) row format delimited
fields terminated by "\t";
insert into teacher values (1,"fangGE","Man"),(2,"文
文","Woman");
select * from teacher;
truncate table teacher;

1.6上传文件映射表

-- ---------------映射文件-----------------------
use sz41db_machine;
show tables ;
create table student(
id int,
stu_name string
)row format delimited
fields terminated by ",";
select * from student;

(1)当数据表字段内容与表目录下的文件数据有对应,则会自动映射数据内容
到Hive表中;
(2)我们会发现,当把数据表导入到HDFS对应目录后,这类插入数据的方式
比直接insert要更高效。

2,外部表操作

1,创建外部表

create external table [if not exists] 表名(
字段名 字段类型 [comment '注释'],
字段名 字段类型 [comment '注释'],
...
)
[comment '注释']
[row format delimited
fields terminated by '指定分隔符']
[location 'HDFS路径名']
[tblproperties (属性名=, 属性名=, ...)];

desc 表名; – 查看字段基本信息 1
desc formatted 表名; – 以表格形式查看信息 1
desc extended 表名; – 以序列化形式查看更多信息

2.1修改表信息

(1)查看创建表语句
为了查看建表的具体信息,可以使用创建表语句:

show create table 表名;

(2)修改字段类型
当要修改表中的字段类型时,语句:

alter table 表名 replace columns (字段名 类型, 字段名 类型, ...);

(3)修改表属性
在创建表时,我们看到可以添加一个[tblproperties属性]选项。其实,也是可以修改
的。语法:

alter table 表名 set tblproperties (属性名=, ...);

说明:
(1)当修改属性且修改表中不存在的属性信息时,则表示添加一个表属性;
(2)当修改表中已有属性名时,仅需设定属性名一致,并把值修改即可。
2,切换内部表与外部表
(1)当仅需要临时使用数据时,可以临时使用外部表,其他时候通常建议使用内部表;
(2)一般情况下,不建议修改表的存储路径地址,因此修改表路径仅作了解。
alter table 表名 set tblproperties (“EXTERNAL”=“TRUE”);

2.2 内部表与外部表的区别

再Hive中,内部表和外部表的区别主要有如下几点:
1,通过external关键字区分,内外部表
内部表:内部表直接使用create table 内部表名 的形式创建即可
外部表:外部表需要使用external 关键字来修饰,因此创建外部表语法时,create external table table 外部表名
2,内部表和外部表再Hive中的管理范围不一样
内部表:表类型表示为Manage_table ,Hive在管理内部表时当使用drop删除表,既能删除内部表的元数据,也能删除在HDFS中的实际数据,因此,Hive能完全控制和管理内部表,所以内部表也可以称为管理表
外部表:表类型表示为,external_taable,Hive在管理外部表时,只能删除元数据信息,而不能删除HDFS中的实际数据,当使用drop删除外部表时,只能删除外部表的元数据,而不能删除外部表位于HDFS中的真实数据,因此,Hive仅能管理外部表的部分内容,所以外部表也可以称为关联表。
3,更改表结构与两类表操作有所不同
内部表:更改内部表结构时,HDFS中可以同步更改数据结果;
外部表:当对外部表更改结构后,HDFS中不能立马同步结果,而需要进行对外部表进行修复操作;
4,存储路径可能不同
内部表:当在设计内部表时,一般对于存储路径是默认的,即/user/hive/warehose目录下;
外部表:一般在创建外部表时,为了数据的安全,可能会设定存储路径名。
以上就是我对内部表和外部表区别的一些个人理解。

3,数据的导入与导出

1.1添加数据

(1)在HDFS访问页面导入文件
首先,进入HDFS访问页面中,然后把外部文件导入存储数据的路径。
(2)直接使用insert into插入数据
采用SQL语法insert来插入数据到数据表中,语法:

insert into 表名[(字段名, 字段名, ...)] values(,, ...);

(3)从已有数据的表中,导入数据到新表
当表A中已存在数据,要把表内数据复制到另一张表B时,语法:

-- 追加数据
insert into [table] 表名A select * from 表名B;
-- 数据覆盖
insert overwrite table 表名A select * from 表名B;

1.2数据的加载

(1)使用hdfs put命令上传文件
(2)使用load语法加载数据
(1)使用hdfs put命令上传文件
-put命令用于将本地系统的文件上传到HDFS系统中,语法:
hdfs dfs -put /本地文件路径 /hdfs文件路径
(2)使用load语法加载数据
load可以翻译为:加载。可以用于给数据表中导入数据,语法:

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

1.3数据的导出

(1)从HDFS页面导出文件
到HDFS访问页面中,直接Download下载文件。
(2)使用hdfs get命令下载文件
-get命令用于将HDFS系统中的文件下载到本地,语法:
(3)使用类SQL命令导出数据
也可以将hive表中的数据导出到其他任意目录,例如linux本地目录、hdfs路径等。

insert overwrite [local] directory "存放目录路径名" select 语句;

将查询的结果导出到本地,且使用默认列分隔符。

insert overwrite local directory '/home/hadoop/export1' select
* from test_load ;

将查询的结果以指定列分隔符\t形式,导出到本地Linux目录。

insert overwrite local directory '/home/hadoop/export2' row
format delimited fields terminated by '\t' select * from
test_load;

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

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

请添加图片描述

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

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

相关文章

后端接口性能优化分析-问题发现问题定义

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码🔥如果感觉博主的文章还不错的话,请👍三连支持&…

使用requests库设置no_proxy选项的方法

问题背景 在使用requests库进行HTTP请求时,如果需要使用爬虫IP服务器,可以通过设置proxies参数来实现。proxies参数是一个字典,其中包含了爬虫IP服务器的地址和端口号。然而,当前的requests库并不支持通过proxies参数来设置no_pr…

【GitLab】-HTTP 500 curl 22 The requested URL returned error: 500~SSH解决

写在前面 本文主要介绍通过SSH的方式拉取GitLab代码。 目录 写在前面一、场景描述二、具体步骤1.环境说明2.生成秘钥3.GitLab添加秘钥4.验证SSH方式4.更改原有HTTP方式为SSH 三、参考资料写在后面系列文章 一、场景描述 之前笔者是通过 HTTP Personal access token 的方式拉取…

持续集成指南:GitHubAction 自动构建+部署AspNetCore项目

前言 之前研究了使用 GitHub Action 自动构建和发布 nuget 包:开发现代化的.NetCore控制台程序:(4)使用GithubAction自动构建以及发布nuget包 现在更进一步,使用 GitHub Action 在其提供的 runner 里构建 docker 镜像,之后提交到阿…

6块钱改变世界,网易和拼多多踏入同一条河流?

年底将至,各种颁奖盛典星光熠熠。如果要给今年深蹲反弹中的互联网大厂颁奖,2023表现最突出的可能是师出同门的兄弟网易和拼多多。 从市场表现来看,两家企业录得今年互联网中概股最高涨幅,被称为“中概股之光”:2023年…

【Spring Cloud】黑马头条 用户服务创建、登录功能实现

点击去看上一篇 一、创建用户 model 1.创建用户数据库库 leadnews_user 核心表 ap_user 建库建表语句 这里一定要使用 navicat,执行SQL 文件,以防止 cmd 中的编码问题 先将 SQL 语句,保存在电脑中,再使用 navicat 打开 CREATE…

华为eNSP综合实验考试

VLAN信息表 设备名称 端口 链路类型 VLAN 参数 HZ-HZCampus-Agg01-S5731 GE0/0/1 Trunk PVID:1 Allow-pass:10 20 Eth-trunk1(GE0/0/2,0/0/3,0/0/23) Trunk PVID:1 Allow-pass:10 20 GE0/0/24 Access PVID&#xf…

(免费)双相情感障碍筛查MDQ 在线测试双向情感障碍

MDQ用于筛查双相障碍,主要包含13个关于双相障碍症状的是非问题,当前测试采用的量表为2010年杨海晨博士翻译版。该量表为目前世界范围内最常用的双相障碍筛查量表,目前在精神科门诊最为常用的量表之一。 双向情感障碍筛查量表,也叫…

【linux】查看CPU的使用率

命令1:top top 总体系统信息 uptime:系统的运行时间和平均负载。tasks:当前运行的进程和线程数目。CPU:总体 CPU 使用率和各个核心的使用情况。内存(Memory):总体内存使用情况、可用内存和缓存…

我记不住的getopt_long的那些参数和返回值

前言:最近在学习面向Linux系统进行C语言的编程,通过查询man手册和查看网络上的各种文章来获取一点点的知识,重点是看完手册还是一脸懵逼,搞不懂手册里面再说啥,而本篇文章将记录一下学习getopt_long的那些参数和返回值…

adb手机调试常用命令

查看手机型号 adb shell getprop ro.product.model 查看电池状况 adb shell dumpsys battery 查看分辨率 adb shell wm size 查看屏幕密度 adb shell wm density 查看显示屏参数 adb shell dumpsys window displays 查看android_id adb shell settings get secure android…

Elasticsearch:运用向量搜索通过图像搜索找到你的小狗

作者:ALEX SALGADO 你是否曾经遇到过这样的情况:你在街上发现了一只丢失的小狗,但不知道它是否有主人? 了解如何使用向量搜索或图像搜索来做到这一点。 通过图像搜索找到你的小狗 您是否曾经遇到过这样的情况:你在街…

V10服务器安装virt-manage

kvm是什么 KVM(Kernel-based Virtual Machine, 即内核级虚拟机) 是一个开源的系统虚拟化模块。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。目前KVM已成为学术界的主流VMM之一,它包含一个为处理器提供底层虚拟化 可加载…

概率论和数理统计(三)数理统计基本概念

前言 “概率论”是给定一个随机变量X的分布F(x),然后求某事件A概率 P ( x ∈ A ) P(x \in A) P(x∈A)或者随机变量X的数字特征.“统计”是已知一组样本数据 { x 1 , x 2 , . . . x n } \{x_1,x_2,...x_n\} {x1​,x2​,...xn​},去求分布F(x) 统计的基本概念 在统计中&#x…

Vue3-admin-template 框架实现表单身份证获取到 出生年月、性别

一. 首先需效验输入身份证信息是否正确&#xff1a; const sfzhChange () > {// 效验身份证号格式const reg /^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/; }; 二.绑定输入框 input 事件&#xff1a; <el-form-item label&q…

监控直流防雷浪涌保护器综合方案

监控系统是一种广泛应用于安防、交通、工业、军事等领域的信息系统&#xff0c;它通过摄像机、传输线路、监控中心等设备&#xff0c;实现对目标区域的实时监视和控制。然而&#xff0c;监控系统也面临着雷电的威胁&#xff0c;雷电可能通过直击雷、感应雷、雷电波侵入等途径&a…

Linux服务器安装Dotnet8

1. 下载dotnet8 sdk 下载 .NET 8.0 SDK (v8.0.100) - Linux x64 Binaries 拿到 dotnet-sdk-8.0.100-linux-x64.tar.gz 文件 2. 把文件上传到 /usr/local/software 目录 mkdir -p /usr/local/software/dotnet8 把文件拷贝过去 mv dotnet-sdk-8.0.100-linux-x64.tar.gz /usr/loc…

安装SSL证书有什么意义?

在当今的数字化时代&#xff0c;网络安全已经成为了一个重要的议题。为了保护网站和用户数据的安全&#xff0c;许多网站都选择了安装SSL证书。同时&#xff0c;很多用户不明白安装SSL证书到底有什么意义&#xff1f; 一、网站实现加密传输 用户通过http协议访问网站时&#x…

vue使用navigator.mediaDevices.getUserMedia调用相机功能

目录 前言&#xff1a; API&#xff1a; API简单示例&#xff1a; 拍照功能 实现效果&#xff1a; 前言&#xff1a; 本文将介绍Vue中如何使用navigator.mediaDevices.getUserMedia调用相机功能&#xff0c;实现拍照使用实例&#xff0c;需要的朋友可以参考一下。 注意…

深度学习YOLOv5车辆颜色识别检测 - python opencv 计算机竞赛

文章目录 1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0…