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;

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

行内样式、内部样式、外部样式

行内样式: 该元素的所在本行中使用style标记来写样式 内部样式: 在head标签中使用style标记来写样式 外部样式: 在head标签中使用link标记引用外部样式 注意优先级: 行内样式>内部样式>外部样式 代码…

【Java 进阶篇】JQuery 遍历 —— For 循环的奇妙之旅

在前端开发的世界里,遍历是一个常见而重要的操作。它让我们能够浏览并操纵文档中的元素,为用户提供更加丰富和交互性的体验。而在 JQuery 中,遍历的方式多种多样,其中 for 循环是一种简单而灵活的选择。在本篇博客中,我…

【918.环形子数组的最大和】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:int maxSubarraySumCircular(vector<int>& nums) {int sum0;for(auto x:nums) sumx;vector<int> f(nums.size());vector<int> g(nums.size…

科研学习|科研软件——SPSS统计的单因素方差分析与单变量方差分析

在spss统计分析中&#xff0c;方差分析在比较均值菜单和一般线性模型菜单中都可以做&#xff0c;单因素方差分析一般称为单因素Anova分析&#xff0c;单变量方差分析一般称为一般线性模型单变量分析。这两种方法既有区别又有联系&#xff0c;在统计学中&#xff0c;这两种分析方…

快速使用vscode写python

1.打开vscode&#xff0c;打开扩展&#xff0c;输入python&#xff0c;点击安装。 2.下载python。官网下载太慢&#xff0c;通过镜像下载。 http://npm.taobao.org/mirrors/python/3.9.0/ 下载python-3.9.0-amd64.exe 3.下载好后安装python&#xff0c;下方的add python to p…

在vue项目里面使用index.ts进行统一导出

目录 一、概述 二、具体实践 2.1创建目录 2.2index.ts文件内容展示 2.2在需要的vue文件里面import 2.3vue全代码 三、实际效果 一、概述 一般我们在做项目的时候会发现vue文件里面没有export default 转而替代的是使用同目录下index.ts进行统一导出 好处&#xff1a;能…

winform+access超市管理信息系统

说明文档 主要技术&#xff1a; 基于C#winform架构和access数据库 功能模块&#xff1a; 登陆和对access数据库的一些简单操作&#xff0c;只适合新手学习看看 运行环境&#xff1a; 运行需vs2013或者以上版本&#xff0c;sql server 2012或者以上版本。附送有运行说明文档。…

科研学习|研究方法——python T检验

一、单样本T检验 目的&#xff1a;检验单样本的均值是否和已知总体的均值相等前提条件&#xff1a; &#xff08;1&#xff09;总体方差未知&#xff0c;否则就可以利用 Z ZZ 检验&#xff08;也叫 U UU 检验&#xff0c;就是正态检验&#xff09;&#xff1b; &#xff08;2&a…

[Mac软件]Adobe XD(Experience Design) v57.1.12.2一个功能强大的原型设计软件

Adobe XD是一个直观、强大的UI/UX开发工具&#xff0c;旨在设计、原型设计、用户之间共享材料&#xff0c;以及通过数字技术设计交互。Adobe XD为您提供开发网站、应用程序、语音界面、游戏界面、电子邮件模板等所需的一切。 无限制地创建 设计各种互动&#xff0c;创建看起来…

Uniapp连接iBeacon设备——实现无线定位与互动体验(理论篇)

目录 前言&#xff1a; 一、什么是iBeacon技术 二、Uniapp连接iBeacon设备的准备工作 硬件设备&#xff1a; 三、Uniapp连接iBeacon设备的实现步骤 创建Uniapp项目&#xff1a; 四、Uniapp连接iBeacon设备的应用场景 室内导航&#xff1a; 五、Uniapp连接iBeacon设备的未来…

Leetcode刷题详解——扫雷游戏

1. 题目链接&#xff1a;529. 扫雷游戏 2. 题目描述&#xff1a; 让我们一起来玩扫雷游戏&#xff01; 给你一个大小为 m x n 二维字符矩阵 board &#xff0c;表示扫雷游戏的盘面&#xff0c;其中&#xff1a; M 代表一个 未挖出的 地雷&#xff0c;E 代表一个 未挖出的 空方…

【53.最大子数组和】

一、题目描述 二、算法原理 三、代码实现 class Solution { public:int maxSubArray(vector<int>& nums) {vector<int> dp(nums.size());dp[0]nums[0];int retdp[0];for(int i1;i<nums.size();i){dp[i]max(dp[i-1]nums[i],nums[i]);retmax(dp[i],ret);}ret…

Linux输入设备应用编程(键盘,触摸屏,按键,鼠标)

目录 一 输入设备编程介绍 1.1 什么是输入设备呢&#xff1f; 1.2 什么是输入设备的应用编程&#xff1f; 1.3 input子系统 1.4 数据读取流程 1.5 应用程序如何解析数据 1.5.1 按键类事件&#xff1a; 1.5.2 相对位移事件 1.5.3 绝对位移事件 二 读取 struct input_e…

ERP管理系统:企业升级的秘密武器

ERP管理系统&#xff1a;企业升级的秘密武器 在当今快速发展的商业环境中&#xff0c;企业要想保持竞争力&#xff0c;就必须不断进行自我升级。而在这个过程中&#xff0c;ERP管理系统以其强大的功能和优化流程的能力&#xff0c;逐渐成为了企业升级的秘密武器。 一、ERP管理…

Java学习之路 —— IO、特殊文件

文章目录 1. I/O1.1 常用API1.2 I/O流1.2.1 字节流1.2.2 try-catch-finally和try-with-resource1.2.3 字符流1.2.4 其他的一些流 2. I/O框架3. 特殊文件3.1. Properties3.2 XML 1. I/O 1.1 常用API // 1. 创建文件对象File file new File("E:\\ComputerScience\\java\\…

JAVA安全之Shrio550-721漏洞原理及复现

前言 关于shrio漏洞&#xff0c;网上有很多博文讲解&#xff0c;这些博文对漏洞的解释似乎有一套约定俗成的说辞&#xff0c;让人云里来云里去&#xff0c;都没有对漏洞产生的原因深入地去探究..... 本文从现象到本质&#xff0c;旨在解释清楚Shrio漏洞是怎么回事&#xff01…

(八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB

​ 一、五种算法&#xff08;DBO、LO、SWO、COA、GRO&#xff09;简介 1、蜣螂优化算法DBO 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为…

JSP 报错 Cannot resolve method ‘print(java.lang.String)‘问题解决

这里 我写了一段比较基础的代码 <%// 定义局部变量String message "Hello, JSP!";out.print(message); %>但是 项目跑起来又是可以的 其实就是缺少了 JAR包 依赖 我们 可以在项目环境中找到 pom.xml dependencies标签内 加入 如下代码 <dependency>…

【1567.乘积为正数的最长子数组长度】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:int getMaxLen(vector<int>& nums) {int nnums.size();vector<int> f(n);vector<int> g(n);f[0]nums[0]>0?1:0;g[0]nums[0]<0?1:0…

JS-项目实战-点击水果名修改特定水果库存记录

1、fruit.js function $(name) {if (name) {//假设name是 #fruit_tblif (name.startsWith("#")) {name name.substring(1); //fruit_tblreturn document.getElementById(name);} else {return document.getElementsByName(name); //返回的是NodeList类型}} }//当…