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.rhkb.cn/news/198490.html

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

相关文章

如何简单挖掘公益SRC?

目录 1、寻找漏洞 1)谷歌语法 2)fofa 2、挖掘漏洞 3、提交报告 第一步:“标题”和“厂商信息”和“所属域名” 第二步:其它内容 第三步:复现步骤 0、IP域名归属证明 1、漏洞页 2、该干啥 3、注入的结果 4、上榜吉时 时间&#x…

【开源】基于JAVA的快递管理系统

项目编号: S 007 ,文末获取源码。 \color{red}{项目编号:S007,文末获取源码。} 项目编号:S007,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 数据中心模块2.2 快递类型模块2.3 快…

Springboot 对于数据库字段加密方案(此方案是对字符串处理的方案)

背景:在erp开发中,有些用户比较敏感数据库里的数据比较敏感,系统给用户部署后,公司也不想让任何人看到数据,所以就有了数据库字段加密方案。 技术 spring boot mybatisplus 3.3.1 mybatisplus 实际提供了 字段加密方案 第一 他…

Java智慧工地SaaS管理平台源码:AI/云计算/物联网

智慧工地是指运用信息化手段,围绕施工过程管理,建立互联协同、智能生产、科学管理的施工项目信息化生态圈,并将此数据在虚拟现实环境下与物联网采集到的工程信息进行数据挖掘分析,提供过程趋势预测及专家预案,实现工程…

Elastic Search的RestFul API入门:index索引的增删改查

在我们开始深入探讨Elasticsearch的Restful API之前,有一点非常重要,那就是Elasticsearch存储的数据是JSON结构的。JSON,全称JavaScript Object Notation,是一种轻量级的数据交换格式,易于人阅读和编写,同时…

拜耳阵列(Bayer Pattern)以及常见彩色滤波矩阵(CFA)

一、拜耳阵列的来源 图像传感器将光线转化成电流,光线越亮,电流的数值就越大;光线越暗,电流的数值就越小。图像传感器只能感受光的强弱,无法感受光的波长。由于光的颜色由波长决定,所以图像传播器无法记录…

解决 VS2022 关于 c++17 报错: C2131 表达式必须含有常量值

使用 VS2022 编译 ORB-SLAM3 加载Vocabulary 二进制ORBvoc.bin 时,在 DBOW2 里修改 TemplatedVocabulary.h 代码显示这样的错误: 编译器错误 C2131 表达式的计算结果不是常数 定位到我的代码中: char buf [size_node] ; 原因 : …

Vatee万腾科技创新之舟:Vatee数字化力量引领未来的独特路径

在数字化的大潮中,Vatee万腾如一艘科技创新之舟,在未来的海洋中翱翔。vatee万腾以强大的数字化力量为桨,引领着行业向着新的、独特的路径前行,塑造着数字时代的未来。 Vatee万腾不仅仅是一家科技公司,更是一艘创新之舟…

(八)、基于 LangChain 实现大模型应用程序开发 | 基于知识库的个性化问答 (检索 Retrieval)

检索增强生成(RAG)的整体工作流程如下: 在构建检索增强生成 (RAG) 系统时,信息检索是核心环节。检索是指根据用户的问题去向量数据库中搜索与问题相关的文档内容,当我们访问和查询向量数据库时可能会运用到如下几种技术…

uni-app:前端实现心跳机制(全局)+局部页面控制心跳暂停和重新心跳

一、App.vue全局中写入心跳 在data中定义变量heartbeatTimer,便于暂停心跳使用在onLaunch中引用开始心跳的方法startHeartbeat()写入开始心跳方法写入暂停心跳方法写入请求后端刷心跳机制 定义变量 // 在全局设置的心跳机制中添加一个变量来保存定时器的标识 data(…

Find My蓝牙耳机|苹果Find My技术与耳机结合,智能防丢,全球定位

蓝牙耳机就是将蓝牙技术应用在免持耳机上,让使用者可以免除恼人电线的牵绊,自在地以各种方式轻松通话。自从蓝牙耳机问世以来,一直是行动商务族提升效率的好工具。正是应为蓝牙耳机小巧无线,人们越来越喜欢随身携带蓝牙耳机出门&a…

【论文阅读】基于隐蔽带宽的汽车控制网络鲁棒认证(一)

文章目录 Abstract第一章 引言1.1 问题陈述1.2 研究假设1.3 贡献1.4 大纲 第二章 背景和相关工作2.1 CAN安全威胁2.1.1 CAN协议设计2.1.2 CAN网络攻击2.1.3 CAN应用攻击 2.2 可信执行2.2.1 软件认证2.2.2 消息身份认证2.2.3 可信执行环境2.2.4 Sancus2.2.5 VulCAN 2.3 侧信道攻…

文件编码、转换、乱码问题

文件编码 用来表示文本内容的字符集和字符编码方式,决定了在文本文件中使用的字符集和字符的二进制表示方式。常见的文件编码包括 UTF-8、UTF-16、ASCII、ISO-8859-1 等。选择文件编码时,需要考虑到所支持的字符集范围、编码方式对特定语言的支持程度以…

手机,蓝牙开发板,TTL/USB模块,电脑四者之间的通讯

一,意图 通过手机蓝牙连接WeMosD1R32开发板,开发板又通过TTL转USB与电脑连接.手机通过蓝牙控制开发板上的LED灯的开,关,闪等动作,在电脑上打开串口监视工具观察其状态.也可以通过电脑上的串口监视工具来控制开发板上LED灯的动作,而在手机蓝牙监测工具中显示灯的状态. 二,原料…

在Go编程中调用外部命令的几种场景

1.摘要 在很多场合, 使用Go语言需要调用外部命令来完成一些特定的任务, 例如: 使用Go语言调用Linux命令来获取执行的结果,又或者调用第三方程序执行来完成额外的任务。在go的标准库中, 专门提供了os/exec包来对调用外部程序提供支持, 本文将对调用外部命令的几种使用方法进行总…

代码逻辑修复与其他爬虫ip库的应用

在一个项目中,由于需要设置 http_proxy 来爬虫IP访问网络,但在使用 requests 库下载文件时遇到了问题。具体表现为在执行 Python 脚本时,程序会阻塞并最终超时,无法正常完成文件下载。 解决方案 针对这个问题,我们可以…

kubenetes-服务发现和负载均衡

一、服务发布 kubenetes把服务发布至集群内部或者外部,服务的三种不同类型: ClusterlPNodePortLoadBalancer ClusterIP是发布至集群内部的一个虚拟IP,通过负载均衡技术转发到不同的pod中。 NodePort解决的是集群外部访问的问题,用户可能不…

基于C#实现最长公共子序列

一、作用 最长公共子序列的问题常用于解决字符串的相似度,是一个非常实用的算法,作为码农,此算法是我们的必备基本功。 二、概念 举个例子,cnblogs 这个字符串中子序列有多少个呢?很显然有 27 个,比如其…

人工智能-深度学习之残差网络(ResNet)

随着我们设计越来越深的网络,深刻理解“新添加的层如何提升神经网络的性能”变得至关重要。更重要的是设计网络的能力,在这种网络中,添加层会使网络更具表现力, 为了取得质的突破,我们需要一些数学基础知识。 ResNet沿…

构建自定义ChatGPT,微软推出Copilot Studio

11月16日,微软在美国西雅图举办“Microsoft Ignite 2023”全球开发者大会。本次人工智能成为重要主题,微软几乎把所有产品都集成了生成式AI功能并发布了一系列全新产品。 其中,微软重磅推出了Copilot Studio(预览版)&…