Data Factory向Delta Lake同步数据时未复制全部行问题咨询
针对你遇到的SQL Server数据源通过ADF Copy组件同步到Delta Lake时,读取行数与写入行数不一致且无报错的问题,结合ADF和Delta Lake的特性,常见原因如下:
源数据存在重复主键/唯一键,且写入模式为Upsert/Merge
如果你的Copy活动设置了Upsert或Merge写入行为,且目标Delta表定义了主键/唯一约束,当源SQL Server表中存在重复键的行时,后续重复键的行只会更新目标表中已存在的行,而非新增。此时ADF统计的写入行数仅包含新增的行,会小于读取的总行数。容错设置跳过了不符合要求的行
若Copy活动的"容错设置"中开启了跳过错误行,且设置了较高的错误阈值,当源数据存在类型不兼容(如SQL Server的datetime格式与Delta Lake的date类型不匹配)、字段长度超限、空值违反目标表非空约束等情况时,不符合要求的行会被静默跳过,且未触发报错,导致写入行数减少。Delta Lake表的分区或数据过滤逻辑隐性生效
如果目标Delta表是分区表,且Copy活动写入时的分区字段值存在异常(如无效的分区键),部分行可能被写入到未被查询到的分区中;或者目标表存在视图、数据过滤规则(如Delta Lake的WHERE条件过滤),导致你查询到的行数小于实际写入的行数。源数据包含特殊字符或不可解析的字段值
SQL Server表中某些字段若包含不可见字符、编码异常的内容,ADF在解析和写入Delta Lake时可能会静默丢弃这些行,尤其是当未开启严格的错误校验时,不会触发报错但会导致行数差异。ADF Copy活动的并行处理导致的行丢失
当Copy活动启用了高并行度的批量读取和写入时,若源数据的行标识(如主键)存在冲突或重复,并行任务之间可能出现数据覆盖或丢弃的情况,且未触发报错,最终导致写入行数少于读取行数。
内容的提问来源于stack exchange,提问作者user3661384

