Я пытаюсь прочитать записи avro из топи c и проверить его перед загрузкой в таблицу. Это обычная проверка, основанная на следующем сценарии:
В схеме есть два поля, 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
Пожалуйста, предложите.