У меня есть запрос в SQL, который я пытаюсь перевести на Pig Latin (для использования в кластере Hadoop).Большую часть времени у меня нет проблем с переносом запросов на Pig, но я столкнулся с чем-то, что, похоже, не могу понять.
Представьте себе выражение select, подобное этому:
SELECT a.f1, b.f2, b.f3 -- just for example
FROM tableA a, tableB b
WHERE(
(
a.f1 = b.f2
AND
(
a.f2 = b.f1
OR
(
(a.f2 = 'somestring1' OR a.f2 = 'somestring2')
AND
(b.f1 is null OR b.f1 ='somestring3' OR b.f1 = 'somestring4')
)
)
OR
(
a.f3 = b.f4
AND
(
a.f4 = b.f3
OR
(
(a.f4 = 'somestring5' OR a.f4 = 'somestring6')
AND
(b.f3 is null OR b.f3 ='somestring7' OR b.f3 = 'somestring8')
)
)
)
)
GROUP BY -- some other stuff
Теперь я знаю, что прямой перевод на Свинью может быть невозможен.Если это так, мне интересно, как этот оператор разлагается на JOIN (и фильтры), необходимые для его вычисления (так как может быть проще понять, как построить запрос Pig из этого).
Я пошел в список рассылки Pig, но пока не нашел хорошего решения, так как Pig на самом деле не делает «ИЛИ» с JOIN.Я знаю о том, как странно этот вопрос.
(Если кто-нибудь действительно имеет представление о том, как это сделать в Pig, я бы не возражал против того, чтобы смотреть на него ...)
Редактировать: Кто-нибудь знает, может быть, это будет проще в Улей, может быть?