大数据开发面试题【数仓篇】

2024-05-28 22:04

本文主要是介绍大数据开发面试题【数仓篇】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

197、数据仓库和传统数据库区别

由于历史数据使用频率过低,导致数据堆积,查询性能下降;用于查询分析,涉及大量的历史数据,数据仓库中的数据一般来日志文件和事务
数据库是跟业务挂钩的,数据库不可能装下一个公司所有的数据,因此数据库的是个设计通常只针对一个应用而设计的;数据仓库是依照分析需求、分析维度、分析指标进行设计的
数据库的操作一般是OLTP:是针对具体的业务在数据库中的联机操作;数据仓库的操作一般是OLAP,是针对某些主题的里哦是数据进行分析,支持管理决策
数据库中主要存放的是一些在线的数据,数仓中主要存放的是历史数据,并且存放的数据要比数据库多
数据库中主要用于处理业务,数仓中主要用于数据分析
数据库的设计就是避免冗余,数仓中会专门引入冗余,减少后面进行的大量的join操作
补充:数仓是什么
数仓是一个面向主题的、集成的(来自不同的数据源)、非易失(一般不会进行删除和修改)并且随时间变化(数据不会变,而是数据随着时间会不断增多)的数据集合,主要用于存储历史数据,然后通过分析整理进而提供数据支持和辅助决策

198、数仓为什么要分层

在管理数据的时候,能对数据有一个更加清晰的掌控
优点:清晰的数据结构;数据血缘追踪;减少重复开发;把复杂的问题简单化;屏蔽原始数据的异常影响
ODS:原始数据层,直接接入业务库、埋点日志、消息队列等,是数仓的准备区
DWD:数据细节层,业务层和数据仓库层的隔离层,保持和ODS层相同颗粒度,进行数据清洗和规范化操作,去空、脏数据
DWM:数据中间层:在DWD基础之上进行轻微的聚合操作,计算出相应的统计指标,聚合结果会生成中间表
DWS:数据服务层:在DWM基础上,整合汇总成一个主题的数据服务层,汇总结果是宽表
ADS:数据应用层:供数据分析和挖掘使用,用于报表

199、数仓建模常用模型吗?区别、优缺点?

三范式建模(immon):在数据仓库的逻辑需要从业务系统的数据模型中的逻辑模型中抽象实体,实体的属性,实体的子类,实体的关系等
范式建模最大的优点是从关系型数据库的角度出发,结合了业务系统的数据模型,能够实现数据仓库的建模;但是这种方法只是限定在关系型数据库之上,限制了整个数据仓库模型的灵活性
维度建模(Kimball):按照事实表、维度表来构建数据仓库、数据集市,星型模型应运而生
维度建模步骤:
1、选择业务过程
2、声明粒度:在同一张事实表中,必须具有相同的粒度,不同的粒度数据建立不同的事实表,一般从最细的粒度开始设计,
3、确认维度:维度表是业务分析的入口,维度表中不能出现重复数据,应该使主键唯一
4、确认事实:事实表是用来度量的,事实表中每一行对应一个度量,每行中的数据是一个特定级别的细节数据;维度建模的核心原则之一就是同一事实表的所有度量必须具有相同粒度

补充:星型模型和雪花模型

雪花模型去除了冗余,设计复杂,可读性差,关联的维表很多,查询效率很低,但扩展性好;多个维表没有和事实表直接相连,而是通过其他的维度表,间接的连接在事实表上,
星型模型冗余度高,设计简单,可读性高,关联的维表很少,查询效率高,可扩展性低;当所有的维表都是和事实表直接相连的时候,整个图形看上去就是一个星星,不存在渐变维度,所以一定有数据冗余,不需要和外表进行关联进行查询和分析,因此效率高
区别:
星型模型和雪花模型最根本的区别就是维度表是直接连接到事实表还是其他维表上
星型模型的数据冗余所以很多查询统计不需要做外部连接
雪花模型遵从三范式,去掉了冗余,有些统计过程需要通过表才可以产生

补充:数仓具体实施步骤

1、进行业务调研:需要了解业务系统,收集分析师运营人员对数据或者报表的需求
2、数据域划分:数据域是指面向业务分析,将业务过程或者维度进行抽象的集合
3、构建总线矩阵:明确业务过程所属的数据域,明确业务过程域与维度的关系
4、规范定义:定义指标(原子指标、派生指标)
5、明细模型设计:包括DIM和DWD
6、汇总模型设计:DWS和ADS
7、代码开发和运维监控

200、维度表和事实表的区别?

维度表是对数据进行分析时候所用的一个量
事实表:是数据聚合后依据某个维度生成的结果表,是具体的统计表
举例:销售统计表一个事实表;价格表和销量表是一个维度表
事实表用来存储事实的度量以及指向各个维的外键值,维表用来保存该维的元数据

补充:缓慢变化维

一些维度表的数据不是静态的,而是会随着事件而缓慢变化
SCD的解决方案:
拉链表:数据仓库系统的目标之一就是正确地表示历史记录,典型代表就是拉链表,保留历史的数据,并插入新的数据
拉链表不存储冗余的数据,只有某行的数据发生变化,才需要保存下来,相比每次全量同步会节省很多空间

201、OLTP和OLAP

oltp:联机事务处理,是传统的关系型数据库的主要应用,是基本的、日常的事务处理
olap:是联机分析处理,强调数据分析,数据一般来自数仓,用于数据挖掘、BI、复杂计算以及财务分析

202、增量表、全量表和拉链表

增量表记录根本更新周期内的新增的数据,在原表的基础之上新增本周期产生的数据
全量表:记录更新周期内的全量数据,
拉链表:记录数据的历史数据,记录数据从开始一致到当前辩护的所有信息,一般有结束之间和开始时间,如果发生变化,就修改当前数据䣌结束时间

203、数据同样存在 hdfs,为什么 hbase 支持在线查询

1)HBase的存储机制:首先,HBase的机制是数据先写入到内存中,当数据量达到一定的量, 再写入磁盘中, 在内存中,是不进行数据的更新或合并操作的,只增加数据,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。
其次,在内存中的数据是有序的,如果内存空间满了,会刷写到HFile中,而在HFile中保存的内容也是有序的。HFile文件为磁盘顺序读取做了优化,按页存储。是顺序写入而不是随机写入,所以速度很稳定,这样保持稳定的同时,加快了速度。
2)HBase底层架构:HBase底层是LSM-Tree+ HTable(Region分区) + Cache——客户端可以直接定位到要查数据所在的HRegion Server服务器,然后直接在服务器的一个Region上查找要匹配的数据,并且这些数据部分是经过Cache缓存的。
3)HBase的读取读取速度快是因为它使用了LSM树型结构。磁盘的顺序读取速度很快。HBase的存储结构导致它需要磁盘寻道时间在可预测范围内,而关系型数据库,即使有索引,也无法确定磁盘寻道次数。而且,HBase读取首先会在缓存中查找,它采用了LRU(最近最少使用算法),如果缓存中没找到,会从内存中的MemStore中查找,只有这两个地方都找不到时,才会加载HFile中的内容,而我们也提到读取HFile速度会很快,因为节省了寻道开销。
(3) 问题扩展HBase的概念和特点可做扩展回答,再根据特点去回答优劣和核心功能,再延伸到适用场景。

  1. HBase概念:HBase是建立在HDFS之上,提供高可靠性的列存储,实时读写的数据库系统。它介于Nosql和关系型数据库之间,仅通过主键和主键的Range来检索数据,仅支持单行事务。主要用来存储非结构化和半结构化的松散数据。
  2. HBase的优缺点:优点:高容错性,高扩展性。key/value存储方式面对海量数据也不会导致查询性能下降。相对于传统行式数据库,在单张表字段很多的时候,可以将相同的列存到不同的服务实例上,分散负载压力。缺点:架构设计复杂,且使用HDFS作为分布式存储,所以在存储少量数据时,它也不会很快。HBase不支持表关联操作,数据分析是HBase的弱项。HBase只部分支持ACID,只支持单行单次操作的事务。
    (4) 综合项目中使用清楚HBase和其他数据库的区别,清楚HBase优势劣势,在哪种场景下,使用哪种技术,当所存储数据需要快速插入查询时,使用HBase,所以Storm或Sparksteaming常常存储入HBase。当数据需要大量聚合运算,计算分析结果时,使用Hive存储,所以Hive是数仓,etl的常用工具。

这篇关于大数据开发面试题【数仓篇】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1011810

相关文章

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1