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

news/2024/5/20 0:49:26 标签: hive, hdfs, 大数据

文章目录

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

一. 数据的组织形式

hive_2">1. hive数据库

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

 

hive_6">2. hive

2.1. 内部表和外部表

内部表:

hivehdfs存储的数据具有最高权限。当删除表时,元数据(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;      

 

外部表:

对数据的管理权限是hdfshive对数据只有使用权。当删除表时,元数据会被删除,表数据不会被删除,仍然会存储到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_skills
 AS
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.niftyadmin.cn/n/346103.html

相关文章

postgresql|数据库|插件学习(二)---postgresql-12的外置插件pg_profile的启用和使用

前言&#xff1a; postgresql数据库有非常多的插件&#xff0c;那么&#xff0c;pg_profile算是监控类的插件&#xff0c;该插件会通过内置的pg_stat_statements插件和dblink插件这两个插件监控查询postgresql的状态&#xff0c;并可以通过打快照的方式得到awr报告。 ###注&a…

从代码层面理解Transformer

跑通 代码使用的是 https://github.com/jadore801120/attention-is-all-you-need-pytorch, commit-id 为: 132907d 各模块粗览 Transformer 主要包括一堆参数, 以及encoder和decoder forward的时候主要做了如下操作. 先 pad_mask过encoder过decoder输出logit 从train.py …

算法设计与智能计算 || 专题九: 基于拉普拉斯算子的谱聚类算法

谱聚类 文章目录 谱聚类1. 信息增益的度量2. 谱聚类: 寻找最优的函数向量 f \boldsymbol{f} f2.1 : 寻找一个最优的函数向量 f \boldsymbol{f} f2.2 寻找鲁棒性更强的多个函数向量2.3 谱聚类(spectral clustering)算法 小结 1. 信息增益的度量 由于数据集 X [ x 1 , x 2 ,…

【面试题】Redis过期删除与内存淘汰

文章目录 Redis过期删除策略&#x1f64e;‍♂️面试官&#xff1a;如何设置key的过期时间&#xff1f;&#x1f64e;‍♂️面试官&#xff1a;什么是Redis过期删除策略&#xff1f;&#x1f64e;‍♂️面试官&#xff1a;过期的key存放到哪里/如何判断key是否过期&#xff1f;…

The Issues Installing vue.js and Node.js

What is the function or meaning for -m in the command of “python -m django --versin”? The -m flag in the command python -m django --version is used to run a module as a script. It requires the user to add a module name as an argument right after it. Af…

MySQL高级篇第一天

目录 一、索引 二、索引结构 三、索引分类 四、索引语法 五、索引设计原则 六、视图 七、存储过程与概述 八、触发器 九、总结 一、索引 &#xff08;一&#xff09;索引概述 索引是一种能够帮组Mysql高效的从磁盘上查询数据的一种数据结构&#xff0c;这些数据结构以某…

【5.21】六、自动化测试—常见技术

目录 6.2 自动化测试常见技术 1. 录制与回放测试 2. 脚本测试 3. 数据驱动测试 6.2 自动化测试常见技术 自动化测试技术有很多种&#xff0c;这里介绍3种常见的技术&#xff1a; 1. 录制与回放测试 录制是指使用自动化测试工具对桌面应用程序或者是Web页面的某一项功能进…

Unity 之 Addressable可寻址系统 -- 将Resources加载资源方式修改为Addressable加载 -- 实战(一)

Unity 之 Resources加载资源方式修改为Addressable加载 一&#xff0c;两种资源加载方式对比二&#xff0c;将Resource项目转为Addressables2.1 实现逻辑2.2 操作步骤 三&#xff0c;使用Addressables的注意事项四&#xff0c;使用中遇到问题 一&#xff0c;两种资源加载方式对…