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

使用Qlik Replicate从OCI同步至Databricks Delta Lake数据异常求助

OCI Oracle通过Qlik Replicate同步至Databricks Delta Lake的数据重复/缺失问题解决

问题概述

使用Qlik Replicate将Oracle Cloud Infrastructure(OCI)中的Oracle数据同步至Databricks Delta Lake表时,出现数据重复和数据缺失异常。Qlik Replicate日志及Databricks查询历史均显示错误,已发现网络相关问题,但无法定位具体根因,需明确缓解方案。

关键错误明细

Databricks侧错误

  • 查询无法调度:HTTP响应码500:集群资源不足、负载过高或服务临时故障导致查询无法被调度。
  • [DELTA_CONCURRENT_APPEND] ConcurrentAppendException:Delta Lake表被并发更新,触发写入冲突。冲突提交详情:
    {"timestamp":1722250928325,"userId":"5954939804701401","userName":"aaaaaaa@xyz.com","operation":"MERGE","operationParameters":{"predicate":["((ITEM#22092922 = seg1_repcol#22092878) AND (LOC#22092925 = seg2_repcol#22092879))"],"matchedPredicates":[{"actionType":"update"}],"statsOnLoad":false,"notMatchedBySourcePredicates":[],"notMatchedPredicates":[]},"readVersion":2917,"isolationLevel":"WriteSerializable","isBlindAppend":false,"operationMetrics":{"numTargetRowsCopied":"0","numTargetRowsDeleted":"0","numTargetFilesAdded":"1","numTargetBytesAdded":"1282377","numTargetBytesRemoved":"1005294","numTargetDeletionVectorsAdded":"158","numTargetRowsMatchedUpdated":"28916","executionTimeMs":"209330","numTargetRowsInserted":"0","numTargetRowsMatchedDeleted":"0","numTargetDeletionVectorsUpdated":"158","scanTimeMs":"83197","numTargetRowsUpdated":"28916","numOutputRows":"28916","numTargetDeletionVectorsRemoved":"158","numTargetRowsNotMatchedBySourceUpdated":"0","numTargetChangeFilesAdded":"0","numSourceRows":"29161","numTargetFilesRemoved":"1","numTargetRowsNotMatchedBySourceDeleted":"0","rewriteTimeMs":"84773"},"tags":{"noRowsCopied":"true","delta.rowTracking.preserved":"false","restoresDeletedRows":"false"},"engineInfo":"Databricks-Runtime/15.2.x-photon-scala2.12","txnId":"eb912069-75fd-4f33-9829-a9cb191b4b7e"}
    

Qlik Replicate侧错误

  • 503响应无Retry-After头:
    02728323: 2024-07-11T00:50:57 [TARGET_LOAD     ]E:  RetCode: SQL_ERROR  SqlState: 08S01 NativeError: 124 Message: [Simba][Hardy] (124) A 503 response was returned but no Retry-After header was provided. Original error: Unknown [1022502]  (ar_odbc_stmt.c:5090)
    
  • SSL连接重置:
    02602439: 2024-07-28T18:12:49 [TARGET_APPLY    ]T:  RetCode: SQL_ERROR  SqlState: 08S01 NativeError: 115 Message: [Simba][Hardy] (115) Connection failed with error: SSL_read: Connection reset by peer [1022502]  (ar_odbc_stmt.c:4737)
    02602439: 2024-07-28T18:12:49 [TARGET_APPLY    ]T:  Network error encountered  (ar_odbc_util.c:1242)
    
  • 语句执行失败(retcode -1):
    04171826: 2024-07-29T14:43:45 [TARGET_APPLY    ]T:  Failed (retcode -1) to execute statement
    

排查与缓解步骤

1. 解决Delta Lake并发写入冲突

  • 调整Qlik Replicate重试策略:将自动重试间隔设置为30秒以上,避免短时间内重复发起MERGE操作触发冲突。
  • 锁定表写入权限:确保仅Qlik Replicate任务拥有该Delta Lake表的写入权限,排除其他任务或手动操作的干扰。
  • 优化Delta Lake MERGE操作:在Databricks执行以下命令降低冲突概率:
    SET spark.databricks.delta.merge.enableLowShuffle = true;
    
    同时检查表的Delta协议版本,确保使用最新版本(通过DESCRIBE EXTENDED <table_name>查看)。

2. 修复网络连接问题

  • 排查网络链路:用ping、traceroute测试Qlik服务器与Databricks集群的连通性,检查防火墙、VPN是否稳定,排除数据包丢失或延迟过高问题。
  • 更新Simba ODBC驱动:升级至Databricks官方推荐的匹配Runtime 15.2.x的最新驱动版本,修复已知的连接重置、503响应处理bug。
  • 配置Qlik网络重试:在任务目标端设置5-10次网络错误重试,并启用指数退避间隔,避免临时波动导致同步失败。

3. 定位数据不一致根因

  • 开启Qlik详细日志:启用目标端DEBUG级日志,记录每条写入语句的执行结果,包括成功/失败行数,定位异常批次。
  • 校验源端与目标端数据:选取主键、更新时间等关键字段,定期执行全量或增量校验,明确重复/缺失数据的范围和原因。
  • 检查Databricks集群资源:查看CPU、内存、磁盘使用率,若资源不足导致调度失败,需扩容节点或调整任务并发度、批处理大小。

4. 临时恢复数据一致性

  • 回滚Delta表版本:使用时间旅行功能恢复到冲突前的版本(版本号取自冲突提交的readVersion字段):
    RESTORE TABLE <table_name> TO VERSION AS OF 2917;
    
  • 补全缺失数据:触发Qlik Replicate的全量同步或增量补同步,同步前确保集群资源充足、网络稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:50:03