随着数据行业的迅速发展,企业面临着存储和处理海量数据的挑战。当前,企业能够收集到的数据量前所未有,这些数据中蕴含着对业务和客户的宝贵洞察。数据以多种形式出现,包括视频、音频和文本。数据湖能够以低成本存储这些格式的数据,并且与特定的供应商无关,这与数据仓库不同。然而,数据湖也存在一些限制,比如维护可靠数据的困难、查询结果不准确、数据量增加导致性能下降以及难以正确地保护和治理数据。如果不解决这些限制,73%的公司数据可能会被闲置。Delta Lake 正是解决这些限制的方案。让深入了解Delta Lake究竟是什么。云对象存储可以容纳和处理属于众多客户的艾字节数据。
Delta Lake 是一个基于文件的开源存储格式和管理层,它使用事务日志,这些日志被压缩成Apache Parquet格式。这使得它能够支持ACID(原子性、一致性、隔离性、持久性),时间旅行和快速的元数据操作。它运行在现有的数据湖之上,并且与Apache Spark等处理引擎兼容。
根据Lee, Das, & Jaiswal(2022)的研究,以下是与Delta Lake相关的一些特点:
在深入探讨Delta Lake的架构/工作模式之前,必须讨论一些关键术语。
以下图像展示了Delta Lake与传统平台相比的优势。
(1) 使用独立存储系统的管道。
(2)Delta Lake。
Delta Lake通过其流I/O和性能特性,用Delta表替换了独立的存储系统,运行ETL和BI。低成本的对象存储减少了数据副本,降低了存储成本和维护开销。
将Delta Lake集成到Apache Spark生态系统中是开始使用Delta Lake的最简单方式。有三种机制:利用本地Spark shell使用Delta Lake,使用Github或Maven,以及利用Databricks社区版。
利用本地Spark shell使用Delta Lake
./bin/pyspark --packages io.delta:delta-core_2.12:1.0
./bin/spark-shell --packages io.delta:delta-core_2.12:1.0
./bin/spark-submit --packages io.delta:delta-core_2.12:1.0
./bin/spark-sql --packages io.delta:delta-core_2.12:1.0
使用Github或Maven
Github是一个在线托管服务,用于开发软件。它为每个项目提供访问控制、错误跟踪、软件功能请求、任务管理和持续集成的好处。Maven是一个构建自动化工具,广泛用于Java项目。使用Maven也可以构建和管理C#、Ruby、Scala等语言的项目。Apache软件基金会是该项目的托管方。
利用Databricks社区版
Databricks是一个基于Web的开放平台,作为一个协作环境,用于执行交互式和计划性数据分析。要创建账户,需要访问https://databricks.com/try并遵循说明免费使用社区版。社区版包括许多教程和示例。可以编写自己的Python、R、Scala或SQL笔记本;也可以导入其他笔记本。
将讨论构建Delta表的基本操作。Delta包括完整的API,用于大数据生态系统中常用的三种语言:Python、Scala和SQL。它可以将数据存储在HDFS和云对象存储中,包括S3和ADLS gen2。它的设计方式是主要由Spark应用程序写入,并且可以被许多开源数据引擎如Spark SQL、Hive、Presto(或Trino)以及许多企业产品如AWS Athena、Azure Synapse和BigQuery读取。在基本操作中,将重点关注使用Python编写和读取Delta表。
data = spark.range(0, 5)
data.write.format("delta").save("/delta")
数据分区在处理大量数据时非常重要。以下代码片段正是这样做的:
data.write.partitionBy("date").format("delta").save("/delta")
如果存在现有的Delta表,并且需要向表中追加或覆盖数据,可以使用mode方法,如下所示:
data.write.format("delta").mode("append").save("/delta")
data.write.format("delta").mode("overwrite").save("/delta")
读取Delta表
spark.read.format("delta").load("/delta").show()
data.write.format("delta").saveAsTable("myTable")