如何获取Delta Live Table及Autoloader更新的外部Delta表检查点位置?
检查点位置查询指南(Delta Live Table与Autoloader)
一、获取Delta Live Table(DLT)的检查点位置
Delta Live Table的检查点默认关联流水线的存储位置,有两种查询方式:
流水线配置页面直接查看
- 在Databricks工作区找到目标DLT流水线,进入其配置页面
- 找到「存储位置」(Storage location)字段,检查点默认存放在该路径下的
system/checkpoints子目录,子目录下会按表/流名称细分具体的检查点文件
通过DLT元数据系统表查询
执行SQL查询获取流水线的存储位置,再拼接检查点路径:
SELECT pipeline_id, storage_location FROM system.dlt.pipelines WHERE pipeline_name = '你的流水线名称';
最终检查点路径为:[storage_location]/system/checkpoints/[表名或流名称]
二、Autoloader结合检查点更新外部Delta表的检查点位置查找
Autoloader的检查点由流作业启动时手动指定,而非存储在系统表中,以下是查询方式:
- 查看流作业配置/代码
Autoloader启动流时必须通过checkpointLocation参数指定检查点路径,示例代码如下:
(spark.readStream .format("cloudFiles") .option("cloudFiles.format", "csv") .load("s3://input-bucket/data") .writeStream .option("checkpointLocation", "/dbfs/checkpoints/external_table_checkpoint") # 检查点路径 .table("external_delta_table"))
该参数值即为检查点的实际存储路径(通常是DBFS或云存储路径)
查看流作业历史与日志
在Databricks「作业」页面找到目标流作业,进入详情页后,可在配置或运行日志中找到checkpointLocation的配置值查询活跃流的状态信息
如果流仍在运行,可执行以下代码获取检查点位置:
for stream in spark.streams.active: progress = stream.lastProgress print(f"流名称: {stream.name}") print(f"检查点位置: {progress.get('checkpointLocation', '未找到')}")
关于SELECT * FROM sys.tables WHERE name LIKE 'databricks_streaming_checkpoint%'失效的说明
该SQL查询仅适用于Databricks托管的内部流表(即通过writeStream.table()创建的托管表,未指定外部路径),这类表会自动生成对应的检查点元数据表。而你使用Autoloader更新的外部Delta表,检查点路径是手动指定的独立存储路径,不会生成此类系统表,因此查询无结果。
内容的提问来源于stack exchange,提问作者Saito Mieko
相关产品推荐
相关产品推荐

