DataHub生产环境部署问题:PayerID字段无法正常显示
生产环境DataHub部署后PayerID无法显示的排查方案
核心前提
UAT与生产环境使用完全一致的jar包,排除代码/配置包本身的问题,问题集中在环境配置差异或生产数据源数据问题,按以下优先级排查:
1. 验证生产数据源的实际数据
这是最常见的触发原因:
- 检查生产环境
RawDEBMAS中E1KNA1M-E1KNVVM-E1KNVPM-PARVW字段的取值:- 是否存在值为
RE的记录?UAT有对应数据但生产环境可能缺失 - 注意大小写:
'RE'.equals(relationshipTypeCP)是严格大小写匹配的,如果生产数据是re/Re,过滤条件会直接不生效
- 是否存在值为
- 同步检查
E1KNA1M-E1KNVVM-E1KNVPM-KUNN2字段是否有非空值,就算过滤条件命中,源字段为空的话PayerID也会无内容显示
2. 核对生产与UAT的DataHub环境配置
- 数据源连接配置:确认生产环境
RawDEBMAS的数据源连接参数、数据抽取范围(比如是否只抽取了部分数据)和UAT完全一致 - 日志排查:生产环境默认日志级别可能较高,临时开启DEBUG日志查看转换过程:
查看日志中是否有# 根据部署路径调整日志配置,开启转换模块DEBUG日志 echo "log4j.logger.com.linkedin.datahub.transform=DEBUG" >> /opt/datahub/conf/log4j.propertiesCanonicalPartyRelationshipSales转CanonicalPartyReB2BUnit时的报错,比如字段找不到、过滤逻辑执行异常等信息 - 权限配置:确认当前访问生产DataHub的用户是否有
CanonicalPartyReB2BUnit实体的读取权限,是否PayerID字段被权限策略隐藏
3. 检查DataHub运行时状态
- 同步任务状态:确认
RawDEBMAS到CanonicalPartyRelationshipSales的同步任务是否正常完成,有没有任务失败或延迟;再检查CanonicalPartyRelationshipSales到CanonicalPartyReB2BUnit的转换任务是否触发 - 缓存清理:生产环境可能存在元数据缓存,尝试清理后重新同步:
# Docker部署环境下清理GMS缓存 docker exec -it datahub-gms curl -X POST http://localhost:8080/entities/clearCache
配置逻辑核对(参考你提供的配置)
Raw配置
<item> <type>CanonicalPartyRelationshipSales</type> <description>Canonical representation of a relationship between two parties</description> <attributes> <attribute> <name>relationshipTypeCP</name> <transformations> <transformation> <rawSource>RawDEBMAS</rawSource> <expression>E1KNA1M-E1KNVVM-E1KNVPM-PARVW</expression> </transformation> </transformations> </attribute> <attribute> <name>businessCustomerNumber</name> <transformations> <transformation> <rawSource>RawDEBMAS</rawSource> <expression>E1KNA1M-E1KNVVM-E1KNVPM-KUNN2</expression> </transformation> </transformations> </attribute> </attributes> </item>
Canonical配置
<item> <type>CanonicalPartyRelationshipSales</type> <attributes> <attribute> <name>relationshipTypeCP</name> <model> <localizable>false</localizable> <collection>false</collection> <type>String</type> <primaryKey>false</primaryKey> </model> </attribute> <attribute> <name>businessCustomerNumber</name> <model> <localizable>false</localizable> <collection>false</collection> <type>String</type> <primaryKey>false</primaryKey> </model> </attribute> </attributes> </item>
Target配置
<item> <type>CanonicalPartyReB2BUnit</type> <exportCode>B2BUnit</exportCode> <description>Update payerId</description> <canonicalItemSource>CanonicalPartyRelationshipSales</canonicalItemSource> <updatable>true</updatable> <filterExpression>'RE'.equals(relationshipTypeCP)</filterExpression> <attributes> <attribute> <name>uid</name> <transformationExpression>resolve('CanonicalParty').externalPartyId.concat('_').concat(salesKey)</transformationExpression> <exportCode>uid[unique=true]</exportCode> <mandatoryInHeader>true</mandatoryInHeader> </attribute> <attribute> <name>payerId</name> <transformationExpression>businessCustomerNumber</transformationExpression> <exportCode>payerId</exportCode> </attribute> </attributes> </item>
从配置逻辑来看,整体流程通顺:从Raw数据源抽取字段到Canonical实体,再通过filter筛选relationshipTypeCP=RE的记录,最终映射businessCustomerNumber到payerId,因此问题必然出在环境或数据层面,而非配置本身。
内容的提问来源于stack exchange,提问作者Smit Patel
相关产品推荐
相关产品推荐

