数据湖面试题
Tags: Delta lakes lakehouses云数据湖面试笔试
数据湖面试介绍
数据湖是用于存储、处理和保护大量结构化、半结构化和非结构化数据的集中存储库。它可以以其本机格式存储数据并处理任何类型与大小的数据。数据湖是数据工程和数据库管理系统中的一个重要概念,也是面试问题的重要主题。希望在一个位置存储所有数据以便于访问和分析的组织经常使用数据湖。
数据湖是一个可扩展且安全的平台,使企业能够以任何速度从任何系统中获取任何数据——即使数据来自本地、云端或边缘计算系统;完全保真存储任何类型或数量的数据;以实时或批处理模式处理数据;并使用 SQL、Python、R 等分析数据。
1. 为什么我们需要数据湖?
数据通常以原始形式保存,无需先进行微调或结构化。然后可以针对预期目的对其进行清理和优化:交互式分析、下游机器学习或分析应用程序的仪表板。最后,数据湖基础设施为用户和开发人员提供了对孤立信息的自助访问。它还允许您的数据团队在相同的信息上进行协作,然后可以为适当的团队或运营管理和保护这些信息。它现在是企业迁移到现代数据平台以扩展其数据操作和机器学习计划的关键组件。因此,数据湖很重要。
2. 数据湖与数据仓库有何不同?
虽然数据湖和仓库存储数据,但它们针对不同的目的进行了优化。考虑它们是互补的而不是竞争的工具,因为企业可能需要两者。另一方面,数据仓库通常是业务实践中常见的可重复报告和分析的理想选择,例如月度销售报告、按区域进行的销售跟踪或网站流量。
3. 使用数据湖有什么好处?
数据湖是存储大量数据的一种经济高效且可扩展的方式。数据湖还可以为分析和决策提供数据访问。
4. 为什么大型科技公司使用和投资数据湖?
数据湖是一种大数据技术,允许企业集中存储大量数据。然后,公司内的各个部门都可以访问和分析这些数据,从而可以做出更好的决策并更全面地了解公司的数据。
5. 数据湖如何用于数据和分析?
数据湖是任何组织数据战略的关键组成部分。数据湖使来自各种来源的组织数据可供最终用户使用,例如业务分析师、数据工程师、数据科学家、产品经理、高管等。反过来,这些角色使用数据洞察力来经济高效地提高业务绩效。事实上,许多类型的高级分析目前只能在数据湖中进行。
6. 数据湖的元数据应该存储在哪里?
数据湖的元数据应该集中保存,所有用户都可以轻松访问。这确保了每个人都可以在需要时找到和使用元数据。
7. Data Lakehouse 与 Data Lake 的区别是什么?
数据湖是几乎所有原始数据的中央存储库。结构化、非结构化和半结构化数据都可以在被处理以进行验证、排序、汇总、聚合、分析、报告或分类之前快速转储到数据湖中。
数据湖房屋是一种较新的数据管理架构,它将数据湖的灵活性、开放格式和成本效益与数据仓库的可访问性、管理和高级分析支持相结合。
Lakehouse 解决了将数据湖变成数据沼泽的基本问题。它包括 ACID 事务,以确保多方同时读取或写入数据时的一致性。它支持星形/雪花模式等 DW 模式架构,并直接在数据湖上提供强大的治理和审计机制。
8. 我们可以在云上部署和运行数据湖吗?
是的,可以在云中部署和运行数据湖。一种选择是使用基于云的数据管理平台,例如 Amazon Web Services (AWS) 数据管道。该平台可以收集、处理和存储来自各种来源的数据,包括本地和基于云的数据源。基于云的数据仓库(例如 Amazon Redshift)是在云中部署数据湖的另一种选择。该平台可以存储来自各种来源的数据,包括本地数据中心和基于云的数据源。
9. 数据湖有哪些不同类型的元数据?
一个数据湖可以包含三种类型的元数据:结构元数据、业务元数据和技术元数据。结构元数据描述数据的组织,业务元数据描述数据的含义,技术元数据描述数据的生成方式。
10. 为什么数据治理很重要?
确保数据准确、一致并符合组织标准和法规的过程称为数据治理。这很重要,因为它确保了数据的高质量并且可用于做出合理的决策。
11. 数据湖的挑战是什么?
数据治理、质量和安全性是与实施数据湖解决方案相关的主要挑战。数据治理可确保数据湖中的数据准确、一致且符合适用法规。数据质量是确保数据干净且可用于其预期目的的过程。数据安全是保护数据免受未经授权的访问和滥用。
12. 数据湖的安全和隐私合规要求是什么?
在使用数据湖时,有多种方法可以确保符合安全和隐私要求。一种方法是加密存储在数据湖中的所有数据。另一种方法是使用基于角色的访问控制来限制谁可以访问哪些数据。最后,可以创建活动日志来跟踪访问数据的人员和时间。
数据湖面试结论
我们查看了一些重要的 Data Lake 面试问题和答案。这些将帮助您进行数据工程面试。使用数据湖,数据科学家可以更快、更准确地访问、准备和分析数据。这个庞大的数据池以各种非传统格式提供,使分析专家能够访问用于各种用例的数据,例如情绪分析或欺诈检测。
关键要点
- 商业智能用户对数据湖感到兴奋,因为它们能够处理速度和多样性。现在有可能将处理过的数据与互联网上可用的主观数据相结合。
- 数据湖在高级预测分析应用程序和定期组织报告中很有用,尤其是在涉及多种数据格式时。
- 数据湖最严重的风险是缺乏安全性和访问控制。由于某些数据可能具有隐私和监管影响,因此可以将数据放置在湖中而无需任何监督。
数据湖在现代数据架构中非常重要,我们研究了一些数据湖面试问题。
Delta lakes lakehouses介绍
由于支持 ACID 事务和开箱即用的功能,Delta lakes lakehouses 受到了极大的欢迎。Databricks最近开源了 deltalake.io。组织正在将 Delta Lake 集成到他们的数据堆栈中,以获得 Delta Lake 提供的所有好处。
随着对数据工程角色的需求不断增加,与市场保持同步是至关重要的,即使不是强制性的。
让我们直接进入它并加强我们对 Delta Lake 的了解。
常见面试问题
Q1。为什么选择 Lakehouse 而不是数据湖?
Delta Lake 是数据湖和数据仓库的混合体,采用 Delta Lake 的 Lakehouse 将提供两全其美的效果。利用 delta Lake 的优势来存储具有 ACID 事务的非结构化数据、为 BI 操作提供服务以及在数据上训练 ML 模型是很有效的。
Delta Lake 为处理流数据、机器学习模型、数据质量、治理和可扩展性提供了多种支持功能。
Q2。湖屋有哪些不同的层次?
Deltalake支持多个不同名称的层——“Delta”、“multi-hop”、“medallion”和“bronze/silver/gold”层。
青铜/原始层:这是上游数据源摄取原始数据的对接层。
青铜层用于存储到达时的原始文件或数据。该层是下游银层的源层。
Silver / Aggregate Layer:这是发生 ETL 和聚合的中心层。
银层是我们执行数据质量检查、治理、连接和聚合的地方。
黄金/业务层:这是发生业务级用例特定聚合的最后一层。
黄金层是仪表板、分析和 BI 任务的来源。
Q3。什么是增量格式?
Delta格式是数据砖从parquet数据格式衍生出来的独家开源产品。
1 | delta_format = spark.read.format("delta").load("path_to_file") |
Delta 格式使用 parquet 的 schema-on-read 并通过提供事务存储层支持 schema-on-write。Delta 格式维护版本控制以支持沿袭和状态。Delta 格式将元数据存储在 _delta_log 文件夹中以支持 ACID 事务。
Q4。什么是三角湖交易?
Delta Lake 事务是 _delta_log 表中的一个条目,用于标记查询/操作已成功完成。Delta Lake 支持表级别的事务。例如,
1 2 | CREATE OR REPLACE TABLE test_table (name STRING, reputation INT, count INT); INSERT INTO test_table VALUES ('Analytics_vidya', 2, 10); |
上面的 SQL 查询在 _delta_log 文件夹中为 CRAS 语句和 INSERT 创建了两个事务。如果我们通过单独的插入查询插入多个条目,则每个插入都会附加一个事务。
单个插入中的多个条目将添加一个事务日志。
1 2 | INSERT INTO test_table VALUES ('Analytics_vidya', 2, 10), ('Databricks', 5, 20); |
所有事务都以增量方式记录为 _delta_log 文件夹中的 JSON 文件。
这些文件是包含有关提交信息添加和删除字段的信息的表。
Q5。Delta Lake 支持 upserts 吗?
是的,Delta Lake 通过 MERGE 功能提供 upsert 操作。
在 SQL 中,upsert 是一种同时完成更新和插入的方法。Delta Lake 的 MERGE 操作类似,提供了一次性执行插入、更新和删除操作的机制。
1 2 3 4 5 6 7 8 9 | MERGE INTO table_1 a USING table_2 b ON a.id=b.id WHEN MATCHED AND b.type = condition_1 THEN UPDATE SET * WHEN MATCHED AND b.type = condition_2 THEN DELETE WHEN NOT MATCHED AND b.type = "condition_3" THEN INSERT *; |
尽管执行多个操作,但 MERGE 有助于 _delta_log 中的单个事务。
Q6。delta Lake 如何提供容错能力?
Delta Lake 支持使用预写日志/日志进行检查点,以通过强大的恢复机制和保证来克服数据丢失。
为了实现操作的持久性,数据库和文件系统提供预写日志。Delta Lake 通过检查点来利用此功能。
1 2 3 4 5 6 7 | spark.readStream.table("raw_table") .writeStream .foreachBatch("custom_logic") .outputMode("append") .option("checkpointLocation", test_checkpoint) .trigger(once=True) .start() |
在 Delta Lake 的上下文中,检查点是一个目录,其中所有接收到的数据都记录为文件,然后进行处理。当遇到故障时,流或作业可以从操作终止的地方开始。
问题 7。Delta Lake 的约束是什么?
约束是一种对我们的数据进行检查以验证数据质量和完整性的方法。
1 | ALTER TABLE test_table ADD CONSTRAINT dateWithinRange CHECK (birthDate > '1995-01-01'); |
Delta Lake 提供 NULL 和 CHECK 约束来处理空值并在加载/修改期间过滤数据。
Q8。什么是湖屋的三角洲时间旅行?
时间旅行是一种回滚或引用先前数据版本以进行审计或回滚数据以防写入错误或意外删除的方式/技术。
Delta Lake 创建数据快照并维护版本控制。对数据的所有更改都作为元数据记录在 _delta_log 中。
Delta Lake 提供了两种变体来完成时间旅行。一种使用版本,另一种使用时间戳。
版本格式——
1 2 | SELECT count(*) FROM test_table VERSION AS OF 5 SELECT count(*) FROM test_table@v |
时间戳格式-
1 | SELECT count(*) FROM test_table TIMESTAMP AS OF "2022-07-01" |
问题 9。什么是自动加载器?
自动加载器是 Databricks 推荐的高效、轻松地处理流数据的方法。Autoloader 提供了一种在数据到达时从云对象存储中读取数据的方法,从而限制了对云存储的 REST 调用,并增加了安全性。
1 2 3 4 | spark.readStream.format("cloudFiles") .option("cloudFiles.format", "json") .schema(schema) .load("path_to_file") |
自动加载器提供了许多特殊功能,例如模式推断和进化。
问题 10。您如何解决 delta Lake 中的小文件问题和偏斜问题?
Delta Lake 包含大量优化来处理我们在大数据中遇到的许多已知问题。
大多数时候,为了确保我们的集群资源利用率和我们的聚合得到最佳执行,有必要确保我们对数据进行分区。
但是,Databricks 建议在必要时避免对数据进行分区,因为 delta Lake 使用专有算法(自动优化)根据其基数来处理分区。
Databricks 对分区进行多次扫描,以检查是否可以根据小文件大小进一步压缩数据,以整理小文件并避免数据偏斜。
1 2 | delta.autoOptimize.autoCompact = true delta.autoOptimize.optimizeWrite = true |
我们可以手动执行优化并使用 Zorder 来索引我们的文件以将小文件合并到一个可管理的分区中。
1 2 | OPTIMIZE test_table ZORDER BY id |
ZORDER 是 delta Lake 数据跳过算法使用的一种机制,用于扫描一组文件以基于索引来配置列信息和压缩文件。
奖金问题
1. 什么是真空?
连续数据更新插入带有版本控制的副本记录在 _delta_logs 文件夹中。
1 2 3 | SET spark.databricks.delta.retentionDurationCheck.enabled = false; VACUUM test_table RETAIN 0 HOURS; SET spark.databricks.delta.vacuum.logging.enabled = true; |
VACCUM 对于从目录中截断一段时间后不再有效的文件很有用。
默认真空期为 7 天。在生产中仔细覆盖它以避免数据丢失。
2. 什么是 ZORDER?
ZORDER 是 delta Lake 数据跳过算法使用的一种机制,用于扫描一组文件以基于索引来配置列信息和压缩文件。
3. 如何回滚或恢复数据?
Delta Lake 提供了一种类似于时间旅行的方式来恢复意外删除或修改的文件。
1 | RESTORE TABLE test_table TO VERSION AS OF 8; |
4. 什么是试运行?
试运行是在执行操作之前执行检查的一种方式。试运行返回设置为删除而不删除它们的文件列表。
1 | VACUUM test_table RETAIN 0 HOURS DRY RUN; |
Delta Lake 结论
Delta Lake 可以成为创造天才产品以消除数据工程和数据科学之间障碍的前沿。了解这些功能并学习如何解决任何问题并面对面试。上面突出显示的功能是最常见的查询。事实证明,高级概念在组织中非常有用,它们提供了独有的功能来轻松完成复杂的集成或触发任务。
要点:
- Lakehouse 正在到处进行调整,因为从成本和架构的角度来看,它被证明是数据湖的可行替代品。
- Delta 格式源自镶木地板,可作为最佳且功能丰富的替代方案。
- 事务是一个有趣的概念,它支持 ACID 保证并允许从之前的状态恢复。
- OPTIMIZE 和 ZORDER 在处理分区数据和小型紧凑文件以提高查询和性能方面非常有用
- AUTOLOADER 是 delta Lake 中的一项专有功能,可支持流式作业而无需任何开销。
- VACCUM 和 DRY RUN 可以是减少日志和可视化查询结果的好方法,而无需将它们记录在事务中。
参考
https://www.modb.pro/db/527185?1031ms
https://www.analyticsvidhya.com/blog/2022/10/top-data-lakes-interview-questions/
https://www.analyticsvidhya.com/blog/2022/07/top-10-delta-lake-interview-questions/