介绍
由于支持 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数据格式衍生出来的独家开源产品。
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 支持表级别的事务。例如,
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 创建了两个事务。如果我们通过单独的插入查询插入多个条目,则每个插入都会附加一个事务。
单个插入中的多个条目将添加一个事务日志。
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 操作类似,提供了一次性执行插入、更新和删除操作的机制。
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 通过检查点来利用此功能。
spark.readStream.table("raw_table")
.writeStream
.foreachBatch("custom_logic")
.outputMode("append")
.option("checkpointLocation", test_checkpoint)
.trigger(once=True)
.start()在 Delta Lake 的上下文中,检查点是一个目录,其中所有接收到的数据都记录为文件,然后进行处理。当遇到故障时,流或作业可以从操作终止的地方开始。
问题 7。Delta Lake 的约束是什么?
约束是一种对我们的数据进行检查以验证数据质量和完整性的方法。
ALTER TABLE test_table ADD CONSTRAINT dateWithinRange CHECK (birthDate > '1995-01-01');
Delta Lake 提供 NULL 和 CHECK 约束来处理空值并在加载/修改期间过滤数据。
Q8。什么是湖屋的三角洲时间旅行?
时间旅行是一种回滚或引用先前数据版本以进行审计或回滚数据以防写入错误或意外删除的方式/技术。
Delta Lake 创建数据快照并维护版本控制。对数据的所有更改都作为元数据记录在 _delta_log 中。
Delta Lake 提供了两种变体来完成时间旅行。一种使用版本,另一种使用时间戳。
版本格式——
SELECT count(*) FROM test_table VERSION AS OF 5 SELECT count(*) FROM test_table@v
时间戳格式-
SELECT count(*) FROM test_table TIMESTAMP AS OF "2022-07-01"
问题 9。什么是自动加载器?
自动加载器是 Databricks 推荐的高效、轻松地处理流数据的方法。Autoloader 提供了一种在数据到达时从云对象存储中读取数据的方法,从而限制了对云存储的 REST 调用,并增加了安全性。
spark.readStream.format("cloudFiles")
.option("cloudFiles.format", "json")
.schema(schema)
.load("path_to_file")自动加载器提供了许多特殊功能,例如模式推断和进化。
问题 10。您如何解决 delta Lake 中的小文件问题和偏斜问题?
Delta Lake 包含大量优化来处理我们在大数据中遇到的许多已知问题。
大多数时候,为了确保我们的集群资源利用率和我们的聚合得到最佳执行,有必要确保我们对数据进行分区。
但是,Databricks 建议在必要时避免对数据进行分区,因为 delta Lake 使用专有算法(自动优化)根据其基数来处理分区。
Databricks 对分区进行多次扫描,以检查是否可以根据小文件大小进一步压缩数据,以整理小文件并避免数据偏斜。
delta.autoOptimize.autoCompact = true delta.autoOptimize.optimizeWrite = true
我们可以手动执行优化并使用 Zorder 来索引我们的文件以将小文件合并到一个可管理的分区中。
OPTIMIZE test_table ZORDER BY id
ZORDER 是 delta Lake 数据跳过算法使用的一种机制,用于扫描一组文件以基于索引来配置列信息和压缩文件。
奖金问题
1. 什么是真空?
连续数据更新插入带有版本控制的副本记录在 _delta_logs 文件夹中。
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 提供了一种类似于时间旅行的方式来恢复意外删除或修改的文件。
RESTORE TABLE test_table TO VERSION AS OF 8;
4. 什么是试运行?
试运行是在执行操作之前执行检查的一种方式。试运行返回设置为删除而不删除它们的文件列表。
VACUUM test_table RETAIN 0 HOURS DRY RUN;结论_
Delta Lake 可以成为创造天才产品以消除数据工程和数据科学之间障碍的前沿。了解这些功能并学习如何解决任何问题并面对面试。上面突出显示的功能是最常见的查询。事实证明,高级概念在组织中非常有用,它们提供了独有的功能来轻松完成复杂的集成或触发任务。
要点:
- Lakehouse 正在到处进行调整,因为从成本和架构的角度来看,它被证明是数据湖的可行替代品。
- Delta 格式源自镶木地板,可作为最佳且功能丰富的替代方案。
- 事务是一个有趣的概念,它支持 ACID 保证并允许从之前的状态恢复。
- OPTIMIZE 和 ZORDER 在处理分区数据和小型紧凑文件以提高查询和性能方面非常有用
- AUTOLOADER 是 delta Lake 中的一项专有功能,可支持流式作业而无需任何开销。
- VACCUM 和 DRY RUN 可以是减少日志和可视化查询结果的好方法,而无需将它们记录在事务中。
原文标题:Top Delta Lake Interview Questions
原文作者:Jay Reddy
原文链接:https://www.analyticsvidhya.com/blog/2022/07/top-10-delta-lake-interview-questions/




