Delta Lake 是一个开源存储层,它将关系数据库语义添加到基于 Spark 的数据湖处理中。 适用于 PySpark、Scala 和 .NET 代码的 Azure Synapse Analytics Spark , Azure DataBricks 都支持 Delta Lake。在大数据这个领域,对象存储的最影响效率的问题就是针对对象存储数据的更新,传统的对象存储如AWS 的S3 , Azure的 Blob等如果要更新要给对象数据的时候,必须要先将对象查找到并删除,然后再追加。这通常会导致性能效率低下。Delta Lake很高的的解决了对象数据更新的问题,并同时支持实时数据流的更新,主要功能如下:
- 支持查询和数据修改的关系表。 使用 Delta Lake,可以将数据存储在支持 CRUD(创建、读取、更新和删除)操作的表中。 换句话说,可以采用与在关系数据库系统中相同的方式选择、插入、更新和删除数据行。
- 支持 ACID 事务。 关系数据库旨在支持事务数据修改,这些修改提供原子性(事务作为单个工作单元完成)、一致性(事务使数据库保持一致状态)、隔离(进行中的事务不能相互干扰)和持久性(事务完成时,它所做的更改将保留)。 Delta Lake 通过实现事务日志并强制实施并发操作的可序列化隔离,为 Spark 提供相同的事务支持。
- 数据版本控制和按时间顺序查看。 由于所有事务都记录在事务日志中,因此可以跟踪每个表行的多个版本,甚至使用按时间顺序查看功能在查询中检索某行的先前版本。
- 支持批处理和流式处理数据。 虽然大多数关系数据库包括存储静态数据的表,但 Spark 包含通过 Spark 结构化流式处理 API 流式处理数据的本机支持。 Delta Lake 表可用作流式处理数据的接收器(目标)和源。
- 标准格式和互操作性。 Delta Lake 表的基础数据以 Parquet 格式存储,该格式通常用于数据湖引入管道。
以下开始Delta的入门操作:
使用免费的Azure Data Bricks 的工作区,参加如下链接:
利用 Azure Data Bricks的免费资源学习云上大数据-优快云博客
一、创建 Delta Lake 表
1、从数据帧创建 Delta Lake 表
创建Ddelta Lake表,以增量格式保存数据帧,指定应存储表的数据文件和相关元数据信息的路径
下载试验用数据:
%sh
rm -r /dbfs/delta_lab
mkdir /dbfs/delta_lab
wget -O /dbfs/delta_lab/products.csv https://raw.githubusercontent.com/MicrosoftLearning/mslearn-databricks/main/data/products.csv
例如:使用现有文件中的数据加载数据帧,然后将该数据帧以增量格式保存到新文件夹位置:
# Load a file into a dataframe
df = spark.read.load('/delta_lab/products.csv', format='csv', header=True)
# Save the dataframe as a delta table
delta_table_path = "/delta/mydata"
df.write.format("delta").save(delta_table_path)
2、验证保存的Delta Lake数据文件
保存 delta 表后,指定的路径位置包括数据的 parquet 文件
%sh
ls /dbfs/delta/mydata
执行后结果如下:
可以使用覆盖模式将现有 Delta Lake 表替换为数据帧的内容,如下所示:
new_df.write.format("delt