记录验证,通过字符串比较来识别错误记录



我正在尝试从主题中读取avro记录,并在将其加载到表中之前对其进行验证。这是一个正常的验证,基于以下场景:

模式中有两个字段,VP和AH。

条件1:

VP and AH can't have A value at the same time, set err_val ='E' in this case.

条件2:

VP and AH must have value A or I, set err_val = 'E' in case of any other value.

所以,我的情况是这样的:

// logic to identify error records
if ((record.value().get("AH").toString().equals("A") && record.value().get("VP").toString().equals("A")) 
|| ((!"I".equals(record.value().get("AH").toString())) || (!"A".equals(record.value().get("AH").toString())))
|| ((!"I".equals(record.value().get("VP").toString())) || (!"A".equals(record.value().get("VP").toString())))
)
{

id              = record.value().get("ID").toString();
id_type         = record.value().get("ID_TYPE").toString();
ah              = record.value().get("AH").toString();
vp              = record.value().get("VP").toString();
effective_date  = record.value().get("EFFECTIVE_DATE").toString();
end_date        = record.value().get("END_DATE").toString();
err_val         = "E";
} else {
id              = record.value().get("ID").toString();
id_type         = record.value().get("ID_TYPE").toString();
ah              = record.value().get("AH").toString();
vp              = record.value().get("VP").toString();
effective_date  = record.value().get("EFFECTIVE_DATE").toString();
end_date        = record.value().get("END_DATE").toString();
err_val         = "";


}

条件1由if语句中的第一行处理,它按预期工作。但是,接下来的两条线路不适用于条件2。

即使我正在制作这样的唱片:

value={"ID": "461761581", "ID_TYPE": "IN", "AH": "I", "VP": "A", "EFFECTIVE_DATE": "20200501", "END_DATE": "20991231"}

我在输出中得到了"E",这是不正确的。

461761581,IN,I,A,20200501,20991231,E

请提出建议。

试试这个:

String AH = record.value().get("AH").toString();
String VP = record.value().get("VP").toString();
Set<String> filter = Set.of("A", "I");
if (("A".equals(AH) && "A".equals(VP)) || (!filter.contains(AH) && !filter.contains(VP))) {
//do something
} else {
//do something
}

您也可以使用String.matches((

if (("A".equals(AH) && "A".equals(VP)) || (!AH.matches("A|I") && !VP.matches("A|I"))) {
//do something
} else {
//do something
}

最新更新