最近,Delta Lake 发布了一项新功能,也就是支持直接使用 Scala、Java 或者 Python 来查询 Delta Lake 里面的数据,这个是不需要通过 Spark 引擎来实现的。Scala 和 Java 读取 Delta Lake 里面的数据是通过 Delta Standalone Reader[1] 实现的;而 Python 则是通过 Delta Rust API[2] 实现的。Delta Lake 是一个开源存储层,为数据湖带来了可靠性。Delta Lake 提供 ACID 事务、可扩展的元数据处理,并统一流数据和批数据处理。其完全兼容 Apache Spark™ 的 API。该项目已经部署在数千个组织中,每周处理超过 EB 级别的数据,成为数据和 AI 架构中不可或缺的一部分。在 Databricks 平台中,超过75%的数据都在 Delta Lake 中。
当前,Delta lake 除了能够使用 Apache Spark 读取,还支持 Amazon Redshift、Redshift Spectrum、Athena、Presto 以及 Hive,更多这方面的信息可以参见 Delta Lake 集成。这篇文章中我将介绍如何使用纯 Scala、Java 或者 Python 来读取 Delta Lake 里面的数据。
Delta Standalone Reader
Delta Standalone Reader (下文简称 DSR) 是一个 JVM 类库,它允许你在不使用 Apache Spark 的情况下读取 Delta Lake 表。也就是说,它可以被任何不能运行 Spark 的应用程序使用。创建 DSR 的动机是为了更好地与 Presto、Athena、Redshift Spectrum、Snowflake 和 Apache Hive 等系统集成。对于 Apache Hive,里面就是使用了 DSR 来实现读取 Delta Lake 表的。有了这个 API,通过 Apache Flink 读取 Delta Lake 表也不是事了。
为了在 Java 或 Scala 中使用 DSR,我们需要 JDK 8 或以上版本,Scala 版本为 2.11 或者 2.12;同时还需要在项目中加入以下依赖:
<dependency>
<groupId>io.delta</groupId>
<artifactId>delta-standalone_2.12</artifactId>
<version>0.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>org.apache.parquet</groupId>
<artifactId>parquet-hadoop</artifactId>
<version&