大数据相关面试题每日五问(七)
- 在数仓设计中,如何确保数据的质量和一致性?应采取哪些措施?
- 解释一下MySQL中的索引,以及它是如何提高查询性能的。
- MySQL中如何处理NULL值?NULL值在查询和比较时有什么特殊的处理方式?
- 简述Secondary NameNode及其作用,它和Standby NameNode 有什么区别?
- ES提供了两种查询方式。请描述它们的区别,并举例说明适用场景。
在数仓设计中,如何确保数据的质量和一致性?应采取哪些措施?
为了确保数据仓库中的数据质量与一致性,应从多个方面着手。首先,建立严格的数据标准和业务规则,统一数据格式、单位和命名规范;其次,在 ETL 过程中对原始数据进行清洗、校验与转换,例如去重、空值处理、异常值识别、数据类型转换等;第三,采用数据血缘和数据校验机制,跟踪数据来源和处理流程,确保加工逻辑可追溯;此外,还应设置 质量监控指标和告警机制,及时发现数据延迟、错误、丢失等问题。最后,数据仓库应通过 主键约束、外键关系、事务控制和版本管理 等方式,强化数据的一致性和完整性。
解释一下MySQL中的索引,以及它是如何提高查询性能的。
MySQL 中的索引相当于书本的目录,用于加速数据的查找。其本质是对表中某列或多列的值建立的有序数据结构(如 B+ 树或哈希),可以极大减少查询时的扫描数据量。比如使用索引查询某个字段,只需通过索引快速定位数据所在页,而无需全表扫描。MySQL 常见的索引类型包括:主键索引(PRIMARY)、唯一索引(UNIQUE)、普通索引(INDEX)和全文索引(FULLTEXT)。索引在提升 SELECT 性能方面作用显著,但也会占用空间并影响 INSERT/UPDATE 的效率,因此需合理设计,避免过多无效索引或重复索引。
MySQL中如何处理NULL值?NULL值在查询和比较时有什么特殊的处理方式?
在 MySQL 中,NULL 表示“未知”或“无值”,不是 0 或空字符串。由于 NULL 表示不确定,它在查询和比较中具有特殊行为:任何值与 NULL 进行运算或比较,结果仍为 NULL(即“未知”),而不是 true 或 false。因此不能用 =
来判断 NULL,必须使用 IS NULL
或 IS NOT NULL
。在排序时,NULL 默认排在最前(ASC)或最后(DESC);在聚合函数中,COUNT(*) 会统计 NULL,而 COUNT(字段) 不会;同时在 JOIN 时,若连接字段有 NULL 值,可能导致匹配失败。因此在处理 NULL 时要格外注意业务语义和查询逻辑的严谨性。
简述Secondary NameNode及其作用,它和Standby NameNode 有什么区别?
Secondary NameNode 是 HDFS 架构中一个辅助角色,主要用于帮助 NameNode 合并 fsimage(元数据快照)和 edits(日志) 文件,避免 edits 日志无限增长,降低 NameNode 重启恢复时间。它不是 NameNode 的热备,而是定期拉取 NameNode 的元数据,在本地合并并回传合并结果。而 Standby NameNode 是在 HA(高可用)架构中与 Active NameNode 成对运行的热备节点,通过共享存储与日志同步,实现 NameNode 宕机后的秒级切换,保障 HDFS 的高可用。因此二者的根本区别在于:Secondary 仅做合并优化,不参与主备切换;Standby 是为高可用服务的真正备用节点。
ES提供了两种查询方式。请描述它们的区别,并举例说明适用场景。
Elasticsearch 提供两种主要的查询方式:Query DSL 中的全文检索(Full-text Queries) 和 精确匹配查询(Term-level Queries)。全文检索查询(如 match
、multi_match
)是针对文本字段,ES 会对查询词和文档进行分词处理,适用于搜索引擎类场景,如模糊搜索文章标题、产品名称等;而精确查询(如 term
、range
、terms
)是对未分词字段进行的精确匹配,常用于结构化字段的查询,如用户 ID、状态值、时间范围等。简单来说,全文查询用于“查找相关内容”,精确查询用于“筛选确定值”,理解这两类查询的差异对于优化搜索准确性和性能非常关键。
努力找实习中,整理一些大数据相关面试题和大家分享,共同学习进步,有建议或批评欢迎留言!