У меня есть таблица A как
ID1 ID2 ID3 VALUE
1 A xx 100
1 A yy 200
1 A yy 100
1 A 100
1 B zz 300
2 B yy 300
2 C yy 400
В таблице B есть действия или правила, описанные ниже, и она может быть записана в более чем 3 поля идентификатора
ID1 ID2 ID3 ACTION
A xx GetAxx
A yy GetAyy
B GetB
Я хочу присоединиться к Таблицы и результат, как показано ниже
ID1 ID2 ID3 TOTAL
1 A xx 100
1 A yy 200
1 A yy 100
1 B zz 300
2 B yy 300
Я пробовал простое условие ИЛИ, а также условные объединения, однако получил ту же ошибку СБОЙ: Декартовы продукты SemanticException отключены по соображениям безопасности. Если вы знаете, что делаете, пожалуйста, установите false для truehive.strict.checks.cartesian.product, а для hive.mapred.mode не задано значение 'strict'.
SELECT * FROM TABLE_A A
JOIN TABLE_B B
ON
(B.ID1 IS NULL OR A.ID1=B.ID1) AND
(B.ID2 IS NULL OR A.ID2=B.ID2) AND
(B.ID3 IS NULL OR A.ID3=B.ID3)
SELECT * FROM TABLE_A A
JOIN TABLE_B B
ON
(COALESCE(A.ID1,"NA")=COALESCE(B.ID1, A.ID1, "NA") and
(COALESCE(A.ID2,"NA")=COALESCE(B.ID2, A.ID2, "NA") and
(COALESCE(A.ID3,"NA")=COALESCE(B.ID3, A.ID3, "NA")
Что является правильным способом условно объединить несколько полей, игнорируя при этом нулевое сравнение из условия соединения или есть способ заставить условие приравнять значение true, если в таблице B имеется значение NULL или существует способ принудительно сопоставить значение NULL из таблицы B с любым значением в Таблица A для возврата true
Любая помощь очень ценится!