【002hive基础】hive的库、表与hdfs的组织逻辑

news/2024/11/15 21:21:05/

文章目录

  • 一. 数据的组织形式
    • 1. hive数据库
    • 2. hive表
      • 2.1. 内部表和外部表
      • 2.2. 分区表与分桶表
    • 3. 视图
  • 二. 底层储存

一. 数据的组织形式

1. hive数据库

hive将不同功能模块的数据,存储在不同的数据库中,在hdfs中以文件夹的形式显示。

 

2. hive表

2.1. 内部表和外部表

内部表:

hive对hdfs存储的数据具有最高权限。当删除表时,元数据(mysql)和(在hdfs)表数据一并删除。

创建内部表:

CREATE TABLE IF NOT EXISTS 
students(user_no INT,name STRING,sex STRING,  grade STRING COMMOT '班级')COMMONT '学生表'  
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','
STORE AS TEXTFILE;      

 

外部表:

对数据的管理权限是hdfs,hive对数据只有使用权。当删除表时,元数据会被删除,表数据不会被删除,仍然会存储到hdfs上。

创建外部表:

CREATE EXTERNAL TABLE IF NOT EXISTS 
students(user_no INT,name STRING,sex STRING,  class STRING COMMOT '班级')COMMONT '学生表'  
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY ','  
STORE AS SEQUENCEFILE 
LOCATION '/usr/test/data/students.txt';   

 

2.2. 分区表与分桶表

分区表:

一个表可以拥有一个或者多个分区,其中每个分区都以文件夹的形式单独存储此分区数据。分区表的建立,减少了查询时扫描数据的范围,提升了查询性能。
具体地、通过分区字段(partitionField=partitionName)来进行分区查询。

CREATE TABLE IF NOT EXISTS 
students(user_no INT,name STRING,sex STRING,class STRING COMMOT '班级')COMMONT '学生表'  
PARTITIONED BY (ds STRING,nation STRING,city STRING)  
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY ','  
STORE AS SEQUENCEFILE;

注意:分区中定义的变量名不能和表中的列相同。
 

比如说,分区表partitinTable有包含nation(国家)、ds(日期)和city(城市)3个分区,其中nation = china,ds = 20130506,city = Shanghai则对应HDFS上的目录为:

/datawarehouse/partitinTable/nation=china/city=Shanghai/ds=20130506/

 
分桶表:

  • 分桶表是将数据按照指定字段进行hash计算后,将数据分到多个文件当中去。
    在hdfs中表现为同一个表目录下根据hash散列之后的多个文件。
  • 分桶表是对分区更细粒度的划分,分桶的核心思想:跟 MR程序的默认分区组件HashParititioner的原理一致: 分桶字段的hash值%num桶=余数=分桶的编号

分桶带来的效果:

  • 通过分桶计算之后余数相同的数据都会放在同一个分桶文件中,一个分桶文件可能存在分桶字段的多个值,也可能没有数据。在这里插入图片描述
  • 注意:如果没有进行分区,分桶的目录就是表目录的下一级; 如果有分区,分桶的目录就是分区目录的下一级。

 

分桶表的创建:

CREATE TABLE IF NOT EXISTS 
students(user_no INT,name STRING,sex STRING,  class STRING COMMOT '班级',score SMALLINT COMMOT '总分')COMMONT '学生表'  
PARTITIONED BY (ds STRING,country STRING) CLUSTERED BY(user_no) 
SORTED BY(score) INTO 32 BUCKETS  
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY ','  
STORE AS SEQUENCEFILE;      

 

3. 视图

hive视图中只存在逻辑视图,不存在物化视图。hive中只储存代表视图的查询语句。使用视图时,才会执行查询语句。

hive视图的作用仅仅提升sql语句的可读性。
基于以上 Hive view 的特性,我们在ETL和数据仓库中对于经常变化的表应慎重使用视图。

视图的创建

CREATE VIEW employee_skillsAS
SELECT name, skills_score['DB'] AS DB,
skills_score['Perl'] AS Perl, 
skills_score['Python'] AS Python,
skills_score['Sales'] as Sales, 
skills_score['HR'] as HR 
FROM employee;

更改视图的属性:

ALTER VIEW employee_skills 
SET TBLPROPERTIES ('comment' = 'This is a view');

重新定义视图:

ALTER VIEW employee_skills AS 
SELECT * from employee ;

删除视图:

DROP VIEW employee_skills; 

 
 

二. 底层储存

hive的存储分为表数据和元数据的存储:
1)表数据存储在hdfs中,存储的数据不带字段信息,存储的默认路径是:/user/hive/warehouse/库目录/表目录,通过修改配置文件hive-site.xml可以修改默认存储路径:

通过修改配置文件hive-site.xml来修改安装目录。       
<property><name>hive.metastore.warehouse.dir</name><value>/user/hive/data/warehouse</value><description>hive default warehouse, if nessecory, change it</description>
</property>

 

2)元数据:存储在关系型数据库中,由配置文件决定元数据存储的位置

<property>         <name>javax.jdo.option.ConnectionURL</name>               <value>jdbc:mysql://localhost:3306/hive_bd1906?createDatabaseIfNotExist=true</value><description>JDBC connect string for a JDBC metastore</description>              <!-- 配置的mysql的连接url 如果 mysql 和 hive 在同一个服务器节点,那么请更改 hadoop03 为 localhost -->
</property>             

元数据存储的内容包括:表数据的字段信息(字段名,字段类型,字段顺序)、表名信息、表和hdfs目录对应的关系。


http://www.ppmy.cn/news/80364.html

相关文章

Java配置类整合SSM框架实现用户登录

文章目录 一&#xff0c;创建数据库与表&#xff08;一&#xff09;创建数据库&#xff08;二&#xff09;创建用户表&#xff08;三&#xff09;在用户表里插入记录 二&#xff0c;创建Maven项目三&#xff0c;添加相关依赖四&#xff0c;创建日志属性文件五&#xff0c;创建数…

网站开发中如何优化CSS JS资源的加载速度

✨求关注~ &#x1f600;博客&#xff1a;www.protaos.com 在网站开发中&#xff0c;优化CSS和JS资源的加载速度对于提高页面加载时间和用户体验至关重要。通过采取一系列的优化措施&#xff0c;可以减小CSS和JS文件的大小&#xff0c;减少网络请求并提高加载速度。 实现方法&a…

Raspberry系统管理 —— 安装和配置OpenVINO

文章目录 什么是OpenVINO下载测试用例加速自己的模型 什么是OpenVINO OpenVINO (Open Visual Inference and Neural Network Optimization) 是一个用于视觉推理和神经网络优化的工具包。它是一个开源的软件平台&#xff0c;可以用于加速神经网络的推理过程。OpenVINO可以在 CP…

渗透测试 | 指纹识别

0x00 免责声明 本文仅限于学习讨论与技术知识的分享&#xff0c;不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;本文作者不为此承担任何责任&#xff0c;一旦造成后果请自行承担…

lintcode-图的拓扑排序(java)

拓扑排序 拓扑排序-lintcode原题题目介绍解题思路代码演示解题方法二 (参考,不用掌握)前置知识 图的拓扑序和深度优先遍历和广度优先遍历 拓扑排序-lintcode原题 127.拓扑排序-原题链接,可以点进去测试 题目介绍 描述 给定一个有向图&#xff0c;图节点的拓扑排序定义如下: 对…

RHCE----Shell变量和引用

1.变量的类型及含义 变量类型: 1、自定义变量: 在当前的shell命令行界面设置的变量是局部变量 例子&#xff1a; num1 namezhangsan 2、环境变量全局变量,通过export 导出后的局部变量是全局变量 、bash的初始化文件&#xff1a;/etc/profile&#xff1a;存放一些全局变量…

RabbitMQ之延迟队列

1 概念 ​ 延时队列&#xff0c;队列内部是有序的&#xff0c;最重要的特性体现在它的延时属性上&#xff0c;延时队列中的元素是希望再指定时间到了以后或之前取出和处理&#xff0c;简单来说&#xff0c;延时队列就是用来存放需要在指定时间被处理的元素的队列 2 使用场景 …

本地源制作

根据软件的来源&#xff0c;制作本地源大致可分为3情况&#xff1a; 1.使用操作系统的官方镜像&#xff1b; 2.使用软件包&#xff1b; 3.使用网络源&#xff1b; 下面依次介绍三种情况&#xff1a; 一、使用官方镜像 ubuntu 18.04 LTS 此处又可以细分为两种方式&#x…