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

Databricks Delta Live Table读取Parquet文件产生重复记录咨询

问题分析与解决方法

核心原因

你的操作问题出在流式表的特性和缺少文件处理跟踪配置:

  • STREAMING LIVE TABLE 是为持续新增的文件流设计的,默认不会记录已处理的文件。如果作业重复运行(哪怕是误触发),会重新读取同一个Parquet文件,导致重复插入。
  • 没有配置cloudFiles.schemaLocation参数,Databricks无法跟踪哪些文件已经被处理过,每次运行都会全量扫描文件夹内的所有文件并加载。

解决办法

方法1:添加文件处理跟踪配置

修改DLT代码,指定cloudFiles.schemaLocation(可以是DBFS或ADLS上的路径),让系统记录已处理文件的元数据,避免重复加载:

CREATE OR REFRESH STREAMING LIVE TABLE Asset 
AS
SELECT * FROM cloud_files(
  "abfss://datalake@storageaccountname.dfs.core.windows.net/loading/Settlement/dbo/Asset", 
  "parquet", 
  map(
    "cloudFiles.inferColumnTypes", "true",
    "cloudFiles.schemaLocation", "abfss://datalake@storageaccountname.dfs.core.windows.net/metadata/asset_schema_tracking"
  )
)

注意:schemaLocation路径需要是一个不会被清理的位置,用来存储文件处理的状态信息。

方法2:改用静态Live Table(更适合一次性加载场景)

如果你的数据源是一次性的(只有这一个Parquet文件,后续不会新增),完全没必要用流式表,直接用静态Live Table即可:

CREATE OR REFRESH LIVE TABLE Asset 
AS
SELECT * FROM parquet.`abfss://datalake@storageaccountname.dfs.core.windows.net/loading/Settlement/dbo/Asset`

临时修复:清理重复数据

如果已经产生了重复记录,可以先清理表中重复数据,再按上面的方法重新加载:

CREATE OR REFRESH LIVE TABLE Asset_cleaned
AS
SELECT DISTINCT * FROM LIVE.Asset;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:56:11