Delta 表的工作原理
默认情况下,在 Databricks 中创建的所有表都是 Delta 表。 Delta 表将数据存储为云对象存储中的文件目录,并将该表的元数据注册到目录和架构中的元存储中。 所有 Unity Catalog 托管表和流式处理表都是 Delta 表。
Delta 表包含可以使用 SQL、Python 和 Scala API 查询和更新的数据行。 Delta 表以开放源代码 Delta Lake 格式存储元数据。 作为用户,可以像对待数据库中的表一样对待这些表 – 可以在其中插入、更新、删除和合并数据。 Databricks 负责以支持高效操作的方式存储和组织数据。 由于数据以开放的 Delta Lake 格式存储,因此可以从 Databricks 之外的许多其他产品中读取和写入数据。
虽然可以在不使用 Delta Lake 的 Databricks 上创建表,但这些表不提供 Delta 表的事务保证或优化性能。 有关使用 Delta Lake 以外的格式的其他表类型详细信息,请参阅什么是表?。
以下示例代码根据纽约市出租车行程样本数据集创建 Delta 表,并筛选出票价高于 10 人民币元的行。 在 samples.nyctaxi.trips
中添加或更新新行时,此表不会更新:
filtered_df = (
spark.read.table("samples.nyctaxi.trips")
.filter(col("fare_amount") > 10.0)
)
filtered_df.write.saveAsTable("catalog.schema.filtered_taxi_trips")
现在可以使用 SQL 或 Python 等语言查询此 Delta 表。
Delta 表和常规视图
视图是对 Unity Catalog 中的一个或多个表和视图进行查询的结果。 可以根据多个架构和目录中的表和其他视图创建视图。
常规视图是一种每次查询时都会重新计算其结果的查询。 视图的主要好处是允许向用户隐藏查询的复杂性,因为他们可以像查询常规表一样查询视图。 但是,由于每次运行查询时都会重新计算常规视图,对于复杂查询或处理大量数据的查询来说,常规视图的成本可能会很高。
下图显示常规视图的工作原理。
以下示例代码根据纽约市出租车行程样本数据集创建常规视图,并筛选出票价高于 10 人民币元的行。 即使在 samples.nyctaxi.trips
中添加了新行或更新了现有行,此视图也始终返回正确的结果:
filtered_df = (
spark.read.table("samples.nyctaxi.trips")
.filter(col("fare_amount") > 10.0)
)
filtered_df.write.createOrReplaceTempView("catalog.schema.v_filtered_taxi_trips")
现在可以使用 SQL 或 Python 等语言查询此常规视图。