一.内部表与外部表
1.Hive 内外部表的定义: 内部表(managed table): 未被external修饰的表,也叫管理表。
Sql语句:
CREATE TABLE internal_table (
id INT PRIMARY KEY,
name VARCHAR(100),
created_at DATE
);
外部表(external table):被external修饰的表。
Sql语句:
CREATE EXTERNAL TABLE external_table (
id INT,
name STRING,
created_at DATE
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION '/path/to/external/data';
2. 内部表&外部表的区别:
内部表:删除表会删除表的元数据(metadata)和表数据(data)。
外部表:删除表会删除表的元数据(metadata),但不会删除表数据(data)。
- 数据管理方式: 数据(data)都存储在HDFS上,内部表由Hive自身管理,外部表数据由HDFS管理; 元数据(metadata)都存储在mysql上,由mysql管理。
-
二.分区表与分桶表
分区针对的是数据的存储路径;分桶针对的是数据文件(数据粒度更细)。分区字段不能是表中已经存在的字段,分桶则相反
- 分区表:分区表是将大表分成多个更小、更易管理的部分,通常基于某个列的值(如日期或地理位置)。每个部分称为一个“分区”。多分区和多级分区。
基本语法:
create table tablename(字段...) partitioned by (分区列 列类型, ......) row format delimited fields terminated by '';
- 分桶表:分桶表是将表中的数据按照哈希算法分成多个“桶”,指定固定的桶去分文件,每个桶是一个数据子集划分文件(分桶进行hash取模),必须触发mapreduce
优化:set hive.enforce.bucketing=true;
基本语法:
create table course (c_id string,c_name string,t_id string) clustered by(c_id) into 3 buckets row format delimited fields terminated by '\t';
不能直接加载数据,需要一个表中转
插入的时候 clustered by(c_id)加在末尾
Hash取模相当于给文件加密,加密之后进行取模 (取余)
三.数据仓库
ODS(Operational Data Store):操作数据存储层,存储来自业务系统的实时或接近实时的原始数据,通常用于支持业务操作和短期分析。
DIM(Dimension):维度数据层,存储描述数据的维度表,如时间、地点、产品等。这些表用于支持多维数据分析。
DWD(Data Warehouse Detail):详细数据层,存储经过初步处理的业务数据的详细记录。数据在这个层次经过清洗和结构化,准备进行进一步的汇总和计算。
DWS(Data Warehouse Summary):汇总数据层,存储汇总后的数据,提供高层次的分析和报表支持,通常基于详细数据层进行计算和聚合。
ADS(Application Data Store):应用数据存储层,存储针对具体应用的分析结果或报表数据,通常用于支持特定业务应用的决策和操作。
四.数仓常见模型
概念:星型模型由一个中心的事实表(Fact Table)和多个周围的维度表(Dimension Table)组成,形成了类似星星的结构
特点:事实表包含了业务过程中发生的事实数据,维度表包含了描述业务过程的各种维度信息。事实表和维度表之间通过一对多的关系进行连接。
优势:星型模型结构简单,易于理解和使用,适用于大多数数据分析场景。查询性能较好,适合快速查询和报表生成。
缺点:可能存在数据冗余,因为维度表中的数据可能在事实表中重复出现,导致存储空间的浪费。同时,维度表之间的关系比较简单,不适合描述复杂的维度层次结构。
概念:雪花模型在星型模型的基础上进一步规范化维度表,将维度表中的数据分解成更多的表,形成类似雪花的结构。
特点:雪花模型通过规范化维度表,减少了数据冗余,提高了数据存储的效率。同时,可以更好地描述复杂的维度层次结构。
优势:雪花模型在节省存储空间的同时,仍保持了较好的查询性能,适合需要更详细的维度信息和更复杂的维度结构的场景。
缺点:雪花模型相对于星型模型来说,结构更加复杂,设计和维护成本较高。同时,多层次的连接可能会影响查询性能。
星座模型:维度空间内的事实表不止一个,而一个维表也可能被多个事实表用到。在业务发展后期,绝大部分维度建模都采用的是星座模式。