hive在数仓ODS层到DWD层建模方法

数仓建模的原因

当今的数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。二者的主要区别对比如下表所示。
在这里插入图片描述
创建数仓主要完成OLAP的业务需求,将原始数据导入到ODS层之后,就需要将原始数据的关系建模转变为维度建模

数仓建模的好处

数仓建模的好处从关系模型和维度模型的对比中可以看出

关系建模

在这里插入图片描述
关系模型如图所示,严格遵循第三范式(3NF),从图中可以看出,较为松散、零碎,物理表数量多,而数据冗余程度低。由于数据分布于众多的表中,这些数据可以更为灵活地被应用,功能性较强。关系模型主要应用与OLTP系统中,为了保证数据的一致性以及避免冗余,所以大部分业务系统的表都是遵循第三范式的。
OLTP系统中,数据多保存在关系型数据库(Mysql)中,一方面数据的冗余会造成数据库难以保存,另一方面表格太大不利于Mysql的快速响应,拆分为多个零碎小表的格式更利于查询使用

维度建模

<think>好的,我现在需要帮用户解决如何基于Hive进行电影评分数据的分析与可视化,并搭建四结构的数据仓库。首先,我得理清楚用户的需求。用户提到的四架构通常是指数据仓库中的分设计,常见的有ODSDWD、DWS和ADS。我需要确保每一的定义和功能都正确,并结合Hive的使用方法。 接下来,我需要回忆Hive在数据仓库中的应用。Hive适合处理结构化数据,适合做ETL和数据分析。电影评分数据可能包括用户ID、电影ID、评分、时间戳等信息,这些数据需要经过清洗、转换后存储到不同的级中。同时,可视化部分可能需要将处理后的数据导出到其他工具,比如Tableau或ECharts。 用户提到的四架构,我需要详细说明每一的作用。ODS是原始数据存储,DWD是清洗后的明细数据,DWS是聚合的轻度汇总,ADS是面向应用的数据。需要确保每个次的设计合理,并且给出Hive表的创建示例,比如分区和存储格式的选择,如ORC或Parquet。 然后,数据分析部分可能需要用到Hive的SQL查询,比如统计平均分、评分分布等。可视化可能需要连接BI工具,这里需要提到如何将Hive的数据导出或者直接连接。另外,数据仓库的搭建步骤,包括数据采集、分建模、ETL流程、调度工具和可视化工具的选择,都需要详细说明。 还需要考虑引用用户提供的参考资料,比如引用[4]中提到的Hadoop、Spark、Hive在电影票房预测中的应用,可以关联到数据仓库的处理流程。同时,引用[3]中的SSM框架和MySQL可能不直接相关,但需要注意用户可能有的系统开发背景。 用户可能希望了解具体的实现步骤和技术选型,比如使用Hive进行数据清洗,使用Sqoop或Flume进行数据采集,Airflow或Azkaban作为调度工具。可视化部分可能需要提到ECharts或Superset,这些工具如何与Hive集成。 最后,生成的相关问题需要围绕数据仓库的其他设计、性能优化、扩展性等,确保覆盖用户可能感兴趣的后续问题。需要检查是否所有要求都满足:使用正确的中文回答,LaTeX格式,引用标记,以及相关问题部分。</think>以下是如何基于Hive进行电影评分数据分析与可视化,并设计四数据仓库的实施方案: # 一、四数据仓库架构设计 $$ODS \rightarrow DWD \rightarrow DWS \rightarrow ADS$$ 1. **ODS(操作数据存储)** - 存储原始采集数据,保持数据原貌 - 创建Hive外部表映射HDFS原始数据文件 ```sql CREATE EXTERNAL TABLE ods_movie_ratings( user_id BIGINT, movie_id STRING, rating DECIMAL(3,1), timestamp BIGINT) PARTITIONED BY (dt STRING) STORED AS ORC LOCATION '/hive/warehouse/ods/movie_ratings'; ``` 2. **DWD(明细数据)** - 数据清洗与标准化:处理缺失值、异常值、格式转换 ```sql CREATE TABLE dwd_movie_ratings( user_id BIGINT, movie_id STRING, rating DECIMAL(3,1), rating_time TIMESTAMP) PARTITIONED BY (year INT, month INT); ``` 3. **DWS(汇总数据)** - 生成多维度的轻度汇总表 ```sql CREATE TABLE dws_movie_analysis( movie_id STRING, avg_rating DECIMAL(3,1), rating_count INT, rating_dist MAP<DECIMAL(3,1),INT>) PARTITIONED BY (genre STRING); ``` 4. **ADS(应用数据)** - 面向可视化应用的最终数据集 ```sql CREATE TABLE ads_visual_data( movie_id STRING, rating_level STRING, popularity_index DECIMAL(5,2)) STORED AS PARQUET; ``` # 二、数据分析实现 1. **评分分布分析** $$f(x) = \frac{1}{N}\sum_{i=1}^{N} \delta(x - r_i)$$ ```sql SELECT movie_id, percentile(rating, 0.25) AS q1, avg(rating) AS avg_rating, percentile(rating, 0.75) AS q3 FROM dwd_movie_ratings GROUP BY movie_id; ``` 2. **时间趋势分析** ```sql SELECT year(rating_time) AS year, month(rating_time) AS month, count(*) AS rating_count FROM dwd_movie_ratings GROUP BY year, month ORDER BY year, month; ``` # 三、可视化实现方案 1. **技术选型** - 使用Hue或Zeppelin进行SQL交互式分析 - 通过Superset连接Hive进行可视化 - 结合ECharts生成动态图表 2. **典型可视化场景** - 评分热力图:展示不同时间段评分密度分布[^4] - 箱线图:显示各电影评分分布特征 - 时间序列折线图:呈现评分趋势变化 # 四、实施步骤 1. 数据采集:通过Sqoop/Flume导入业务系统数据 2. 分建模:按四架构设计Hive表结构 3. ETL开发:使用HQL+Spark SQL进行数据加工 4. 任务调度:配置Airflow调度ETL工作流 5. 可视化集成:通过JDBC连接可视化工具 # 五、优化策略 1. **存储优化** - 采用ORC格式存储,压缩比提升60%[^2] - 按时间分区+分桶存储 2. **计算优化** ```sql SET hive.vectorized.execution.enabled=true; -- 启用向量化查询 SET hive.tez.container.size=4096; -- 调整计算资源 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值