Hive中数据库和表的操作(HSQL)

news2024/9/25 19:14:45

数仓管理工具Hive可以将HDFS文件中的结构化数据映射成表,
利用HSQL对表进行分析,HSQL的底层运行机制,默认是MapReduce计算,也可以替换成Spark、Tez、Flink

计算结果存储在HDFS,像Hive中的库、表、字段、表所属库、表的数据所在目录、分区等信息称为元数据,元数据默认存储在自带的derBy数据库,
也可以切换MySQL、Postgres、Oracle、MS SQL Server存储元数据,对应的库为hive数据库实例,对应的元数据表为hive数据库实例下的表
在这里插入图片描述

1. hive的安装方式

HiveServer1
HiveServer,也称HiveServer1,是Hive1.0.0版本之前的内置服务,允许客户端使用不同编程语言向 Hive 提交请求并返回结果。允许远程客户端使用不同编程语言向 Hive 提交请求并返回结果。但一次只能连接一个客户端,无法处理来自多个客户端的并发请求

HiveServer2
HiveServer2 是HiveServer1 的改进版,作为一种复合服务,包括基于 Thrift 的 Hive 服务(TCP或HTTP)以及用于 Web UI的 Jetty Web 服务。可以支持多客户端并发和身份认证。

metastore(元数据服务)
客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。

1.1 内嵌模式安装

  • 使用内嵌的Derby数据库来存储元数据
  • 数据库和Metastore服务都嵌入在主Hive Server进程中
  • 一次只能一个客户端连接
  • 不同路径启动hive,每一个hive拥有一套自己的元数据,无法共享
    在这里插入图片描述

1.2 本地模式

  • 采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server
  • Metastore服务嵌入在Hive Server进程中
  • 每启动一次hive服务,都内置启动了一个metastore
  • hive-site.xml中 hive.metastore.uris为空
    在这里插入图片描述

1.3 远程模式

  • 采用外部数据库来存储元数据
  • 单独起metastore服务
  • metastore服务和hive运行在不同进程
  • hive.metastore.uris指定metastore服务运行的机器ip和端口
    在这里插入图片描述

2. 外部表与内部表

未加 external修饰的表是内部表,数据默认存储位置:
由参数指定 hive.metastore.warehouse.dir

2.1 创建数据库

默认位置:/user/hive/warehouse

create database myhive;

2.2 删除数据库

-- 删除空数据库
drop database myhive ;
--删除的数据库里边有表,则必须加 cascade关键字
drop database myhive cascade;

2.3 映射文件夹

指定数据库对象(数据库实例、表)的映射文件夹,
也是 内部表、外部表(创建时不指定location的情况) 的数据存储位置

-- 指定内部表的数据存储位置
create database if not exists myhive location  '/myhive';

2.4 创建内部表

use myhive;
create table t_covid(
    dt string comment '日期',
    country string comment '县',
    state string comment '州',
    country_code string comment '县编码',
    cases int comment '确诊人数',
    deaths int comment '死亡人数'
) comment '美国新冠数据'
row format delimited fields terminated by ',' -- 字段之间的分隔符

2.5 加载本地数据

加载hive服务部署主机的磁盘数据到内部表

load data local inpath '/export/data/covid.dat' into table t_covid;

将本主机文件/export/data/covid.dat 复制 一份到内部表数据存储位置

2.6 加载HDFS数据

加载分布式文件系统中的数据到内部表

hadoop dfs -put /export/testdata/covid1.dat  /data/
load data  inpath '/data' into table t_covid;

将分布式文件系统目录/data下的数据 剪切 一份到内部表数据存储位置

2.8 创建外部表

指定external关键字创建外部表

drop table if exists t_covid;
create external table t_covid(
    dt string comment '日期' ,
    country string comment '县',
    state  string comment '州',
    country_code string comment  '县编码',
    cases int comment '确诊人数',
    deaths int comment '死亡任务'
)comment '美国新冠数据'
row format delimited fields terminated by ',' -- 自定字段之间的分隔符
location '/input/data' --可选项,指定数据存储位置,默认存储在数据库的映射文件夹中

2.9 表类型判断

desc formatted tablename

在这里插入图片描述
MANAGED_TABLE 内部表
EXTERNAL_TABLE 外部表

2.10 内部表与外部表的区别

当删除内部表时,元数据和表数据一起删除;
当删除外部表时,只删除元数据(映射信息),不删表数据.(元数据存储在数据库,表数据存储在HDFS),重新执行外部表建表语句,数据自动填充

外部表的表数据可以被多张外部表共享,
create external tablename()
row format delimited fields terminated by ‘,’
location ‘’; – 指向同一个表数据文件
内部表的表数据被内部表独占

3. 分区表和分桶表

分区,即对一个表数据文件按特征分到多个文件夹下存储,查询时可指定分区查找,避免全文件扫描

3.1 静态分区表

手动建立分区的文件夹,根据数据特征,手动把文件拆分到多个文件夹

create  table p_covid(
    dt_value string,
    country string,
    state string,
    country_code string,
    cases int,
    deaths int
)
partitioned by (year string,month string,day string) -- 指定分区字段,字段名任意
row format delimited fields terminated by ',';
load data local inpath '/export/testdata/covid1.dat' into table  p_covid partition (year='2023',month='02',day = '22');
load data local inpath '/export/testdata/covid2.dat' into table  p_covid partition (year='2023',month='02',day = '23');
load data local inpath '/export/testdata/covid3.dat' into table  p_covid partition (year='2023',month='02',day = '24');

对应查询语句:指定分区字段查询

select * from p_covid where year='2023' and month='02' and day='22';

查询结果
在这里插入图片描述
数据文件:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

-- 手动添加分区
alter table p_covid add partition (year='2023',month='02',day = '25');
-- 查看分区文件夹信息
show partitions p_covid;

3.2 动态分区表

hive根据数据本身的特点,自动创建文件夹,自动把文件拆分成多份分到文件夹

  • 开启动态分区功能
-- 开启动态分区的功能
set hive.exec.dynamic.partition=true; 
-- 设置非严格模式
set hive.exec.dynamic.partition.mode=nonstrict; 
  • 动态分区,需要把文件映射成一张普通表,借助普通表完成动态分区表的建立
-- 建立普通表并加载本地数据
create  table covid(
    dt string comment '日期' ,
    country string comment '县',
    state  string comment '州',
    country_code string comment  '县编码',
    cases int comment '确诊人数',
    deaths int comment '死亡任务'
) comment '美国疫情数据表'
row format delimited fields terminated by ',';
load data local inpath '/export/testdata/covid1.dat' overwrite  into table  covid ;
load data local inpath '/export/testdata/covid2.dat' overwrite  into table  covid ;
  • 按年、月、日建立多级分区文件夹
-- 建立动态分区表,借助中间表完成数据初始化
create  table d_covid(
    country string,
    state string,
    country_code string,
    cases int,
    deaths int
)
partitioned by (year string,months string,day string)
row format delimited fields terminated by ',';
-- 2021-01-28
insert overwrite table d_covid
select country,state,country_code,cases,deaths,substring(dt_value,1,4) ,substring(dt_value,6,2),substring(dt_value,9,2) from p_covid;
  • 查看表数据
    在这里插入图片描述

3.3 分桶表

分桶,即将一个分区文件夹下的表数据文件,进一步拆分成多个比较小的文件,一个桶对应一个文件,这样做的目的时提高小表的JOIN效率,和用于小表的抽样

  • 开启分桶功能
set hive.enforce.bucketing=true;
  • 借助普通表covid,完成分桶表的建立和初始化
create table t_covid_bucket
(
    dt_value string  ,
    country string ,
    state  string ,
    country_code string ,
    cases int ,
    deaths int
)
clustered by(country_code) into 5 buckets
row format delimited fields terminated by ',';

insert overwrite table t_covid_bucket
select * from covid cluster by(country_code);

分桶机制:对字段 country_code的值取Hash值,再对桶数取模
,一个桶对应一个文件
在这里插入图片描述

3.4 分区分桶表

即先建立分区表,再在分区表的基础上建立分桶表

-- 建立分区分桶表
drop table  if exists  p_c_covid;
create  table p_c_covid(
    country string,
    state string,
    country_code string,
    cases int,
    deaths int
)
partitioned by (year string,months string,day string)
clustered by (country_code) into 3 buckets
row format delimited fields terminated by ',';
-- 借助普通表covid,完成分区分桶表的初始化
insert overwrite  table p_c_covid
select country,state,country_code,cases,deaths,substring(dt,1,4) ,substring(dt,6,2),substring(dt,9,2) from covid;

表数据文件:
在这里插入图片描述

3.5 分区表和分桶表的区别

  • 分区表是将一个文件拆分到多个文件夹,分桶表是将一个分区文件夹下的文件拆分成多个比较小的文件
  • 一张表既可以是分区表也可以是分桶表
  • Hive分区 和 MR中的分区是两个不同计算框架中的概念

4. 表的修改

4.1 表重命名

alter table t_covid_bucket rename to covid_bucket;

4.2 查询表结构

DESC FORMATTED t_covid_bucket1;
DESC t_covid_bucket1;

4.3 添加列

alter table covid add columns (testcolumn string);

4.4 更新列

alter table covid change column testcolumn ctest string;

4.4 删除列

重新定义列及类型,排除要删除的列,例如要删除c列
alter table covid replace columns ( a sting,b string, c int);
alter table covid replace columns ( a sting,b string);

4.4 删除表

drop table if exists t_covid_bucket1

4.5 清空表数据

只清除内部表数据
truncate table t_covid_bucket1;
delete t_covid_bucket1;

5. 数据加载方式

5.1 insert into

insert into covid
values(‘2021-01-28’,‘Autauga’,‘Alabama’,‘01001’,5554,69),
(‘2021-01-28’,‘Baldwin’,‘Alabama’,‘01003’,17779,225),
(‘2021-01-28’,‘Barbour’,‘Alabama’,‘01005’,1920,40);
values后面有3个语句,底层启动3个JOB任务

5.2 create … as

复制一张表的表结构及表数据
create table covid1
as select dt , country,state,country_code,cases,deaths from covid;

5.3 直接上传数据文件

表数据文件直接上传到数据库映射文件,默认: /user/hive/warehouse
hadoop dfs -put 表数据文件 /user/hive/warehouse/xxxx.db/xxx

5.4 load

加载本地磁盘文件
load data local inpath ‘表数据文件路径’ [overwrite] into table xxxx
load data inpath ‘表数据文件路径’ [overwrite] into table xxxx

5.5 insert…select

借助中间表
insert into xxx select * from temp;
insert overwrite table xxxx select * from temp;

5.6 location

HDFS先有数据,后有表 ,建表时使用location关键字

create external table t_covid2(
dt string comment ‘日期’ ,
country string comment ‘县’,
state string comment ‘州’,
country_code string comment ‘县编码’,
cases int comment ‘确诊人数’,
deaths int comment ‘死亡任务’
)comment ‘美国新冠数据’
row format delimited fields terminated by ‘,’ – 自定字段之间的分隔符
location ‘/input/data’;

5.7 第三方工具

Kettel、Sqoop

6. 数据导出方式

6.1 写出到本地

insert overwrite local directory ‘/export/testdat/’
– row format delimited fields terminated by ‘,’
select * from covid;

本地磁盘文件名:
/export/testdat/000000_0
/export/testdat/000001_0,
每行字段分割符,默认’\001’,可指定分割符

6.2 写出到HDFS

insert overwrite directory ‘/export/testdat/r.txt’
– row format delimited fields terminated by ‘,’
select * from covid;

6.3 写出到其它表

见 数据加载方式: 5.2 和 5.5

6.4 第三方工具

使用第三方工具(sqoop,Kettle,Datax,Presto),导出其他的存储平台(HBase、Spark、MySQL)

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

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

相关文章

Zebec社区上线ZIP-2(地平线升级行动)提案

此前,Zebec社区在上线了投票治理系统Zebec Node后,曾上线了首个提案ZIP-1,对Nautilus Chain的推出进行了投票,作为Zebec Chain上线前的“先行链”,该链得到了社区用户的欢迎,投通过票的比例高达98.3%。而Na…

[Java代码审计]—命令执行失效问题

前言 关于Java的命令执行其实一直都没有单独学习过,正好昨天师傅问了一个问题:命令执行时字符串和字符串数组用哪个更好一些。当时被问得有点懵难道不都一样么?其实不然,借此重新了解下RCE以及失效问题。 单例模式 常规命令执行…

基于STM32 电机库(5.4.4)的单电阻采样调试总结

目录 硬件调整 软件调整 下载运行 参数优化 总结 硬件调整 实验用的开发板和电机如下,在调单一电阻之前已经在三电阻的环境下把启动运行的参数已经调好了,这里不多说。调好后需要把硬件改成单电阻采样。 如下原理图: 只需要把R75,76两…

每个人都应该知道的5个NLP代码库

在本文中,将详细介绍目前常用的Python NLP库。内容译自网络。这些软件包可处理多种NLP任务,例如词性(POS)标注,依存分析,文档分类,主题建模等等。NLP库的基本目标是简化文本预处理。目前有许多工…

【6】linux命令每日分享——rm删除目录和文件

大家好,这里是sdust-vrlab,Linux是一种免费使用和自由传播的类UNIX操作系统,Linux的基本思想有两点:一切都是文件;每个文件都有确定的用途;linux涉及到IT行业的方方面面,在我们日常的学习中&…

loki 日志管理的安装部署使用

loki介绍 Loki是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。 不对日志进行…

python学习之手把手教你将图片变成黑白或彩色字符画(骚操作)

文章目录前言一、字符画的实现原理二、黑白字符画实现代码三、彩色字符画生成代码实现:总结前言 字符画这个话题,似乎早在贴吧时代就已经被玩烂了。在百度图片随便一搜索,就能够看到非常多。然后在这个时代,会编程的人越来越多&a…

Transformer输出张量的值全部相同?!

【bug】Transformer输出张量的值全部相同?!现象原因解决现象 输入经过TransformerEncoderLayer之后,基本所有输出都相同了。 核心代码如下, from torch.nn import TransformerEncoderLayer self.trans TransformerEncoderLayer…

日记本-课后程序(JAVA基础案例教程-黑马程序员编著-第七章-课后作业)

【实验7-3】 日记本 【任务介绍】 1.任务描述 编写一个日记本功能的程序,使用字节流经日记的具体信息记录在本地的txt文件中。当用户输入日记的特定内容后,会将输入的内容保存至本地的txt文件中。需要输入的内容包括“姓名”,“天气”、“…

OpenFeign详解

OpenFeign是什么? OpenFeign: OpenFeign是Spring Cloud 在Feign的基础上支持了SpringMVC的注解,如RequesMapping等等。OpenFeign的FeignClient可以解析SpringMVC的RequestMapping注解下的接口,并通过动态代理的方式产生实现类&am…

基于YOLOv5的细胞检测实战

数据及代码链接见文末 1.任务与数据集介绍 如下图所示,我们有一个医学细胞数据集,需要从数据集中检测出三种不同的细胞。标签中已经标注了细胞的类别和位置。 我们也可以看到,三种细胞有着不同的形态和颜色,同时数据集的标签也存在没有标注到的细胞 2.数据与标签配置方…

【打卡-Coggle竞赛学习2023年2月】图节点嵌入

文章目录## Part4 图节点嵌入### 背景介绍### 环境配置### 学习打卡- 任务1:图属性与图构造- 任务2:图查询与遍历- 任务3:节点中心性与应用- 任务4:图节点嵌入算法:- 任务5:图节点嵌入算法:- 任…

PowerAutomation获取邮件附件并删除这个邮件方法

这个文章是怎么来的呢?现在不是低代码开发平台启蒙阶段嘛?笔者也有幸在工作中进行了尝试,目前也已经在实际工作中结合Python进行了使用,当然,是可以提高IT的工作效率的。需求是这样的,想从公司的EBS平台报表…

3.5 实战:Spring Boot 实现系统多环境配置

第3章 Spring Boot 的系统配置 3.1 Spring Boot 系统配置文件 3.2 Spring Boot 自定义配置项 3.3 Spring Boot 其他配置 3.4 Spring Boot 日志配置 3.5 实战:Spring Boot 实现系统多环境配置 3.5 实战:Spring Boot 实现系统多环境配置 在实际项目开发的…

python的所有知识点(含讲解),不看就亏死了

目录 简介 特点 搭建开发环境 版本 hello world 注释 文件类型 变量 常量 数据类型 运算符和表达式 控制语句 数组相关 函数相关 字符串相关 文件处理 对象和类,注:不是那个对象!!!!&…

2023年安徽省职业院校技能大赛“网络空间安全” 比赛任务书

2023年安徽省职业院校技能大赛“网络空间安全” 比赛任务书 一、竞赛时间 总计:360分钟 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A模块 A-1 登录安全加固 180分钟 200分 A-2 Nginx安全策略 A-3 日志监控 A-4 中间件服务加固 A-5 本地安全策略 A-6 防火墙策…

基本程序设计技术

一.统计(计数)问题:方法:计数变量c的初值为0,每输入一个数据,进行必要判断后,若输入的数据满足统计条件,则计数变量c自加1,这样当对所有输入进行判断后,计数变…

多线程案例(一)【单例模式+阻塞队列】

一、单例模式 单例模式属于最容易被问到的一种设计模式。 啥是设计模式? 类似于棋谱,按摩模式写代码,可以更加规范。 单例模式的含义: 单例:单个实例对象 某个类有且只有一个对象。 这一点在很多场景上都需要. 比如…

如何轻松录制 CS 游戏玩法?4 种免费录制 CS 游戏视频的方法

CS:GO,又名反恐精英:全球攻势,是一款多人第一人称射击游戏,由 Valve 和 Hidden Path Entertainment 于 2012 年设计推出。作为反恐精英系列的第四代,它广受欢迎与全球游戏玩家。随着近年来电子竞技的兴起,用…

冒泡排序(朴素+优化)

思想 先来看一张动图 上面这张图就是冒泡排序的代码可视化 很显然我们可以发现,冒泡排序的基本思想就是从前往后比对,一直将找到的最大值交换到序列的末尾感觉冒泡排序这个名字还是很形象的 朴素做法 不难看出,将最大值交换到末尾的操作一…