You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Synapse Notebook中用Spark SQL读取Data Lake的Delta表及历史?

解决Delta表历史记录查询问题

问题原因

你创建的临时视图是基于Delta表的数据内容生成的DataFrame,仅包含表的行数据,没有关联Delta表的元数据(版本、历史操作等),因此DESCRIBE HISTORY命令无法识别该视图——这个命令需要直接针对Delta表的元数据入口(要么是注册到元数据的Delta表,要么是Delta表的存储路径)。

解决方案

方案1:Spark SQL直接通过路径查询历史

无需创建临时视图,直接在Spark SQL中指定Delta表的存储路径执行DESCRIBE HISTORY:

DESCRIBE HISTORY 'abfss://mysource@mydatalake.dfs.core.windows.net/Silver/ProductModelProductDescription'

方案2:通过DeltaTable对象获取历史并转为SQL可查的视图

利用你已创建的DeltaTable对象获取历史记录,再将其转为临时视图供Spark SQL查询:

from delta.tables import DeltaTable

path = 'abfss://mysource@mydatalake.dfs.core.windows.net/Silver/ProductModelProductDescription'
delta_table = DeltaTable.forPath(spark, path)

# 获取Delta表的历史记录DataFrame
history_df = delta_table.history()
# 创建临时视图,供Spark SQL查询
history_df.createOrReplaceTempView("ProductModelProductDescription_History")

之后就可以用Spark SQL查询历史:

SELECT * FROM ProductModelProductDescription_History

方案3(可选):将Delta表注册为元数据中的表

如果需要长期通过表名而非路径查询,可以将Delta表注册到Synapse的元数据库中:

spark.sql(f"""
CREATE TABLE IF NOT EXISTS ProductModelProductDescription
USING DELTA
LOCATION 'abfss://mysource@mydatalake.dfs.core.windows.net/Silver/ProductModelProductDescription'
""")

注册完成后,直接用表名执行历史查询:

DESCRIBE HISTORY ProductModelProductDescription

内容的提问来源于stack exchange,提问作者Joost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:12:29