我有一个 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
现在,我知道直接翻译为 Pig 可能是不可能的。如果是这种情况,我想知道如何将此语句分解为计算它所需的 JOIN(和过滤器)(因为可能更容易看到如何从中构造一个 Pig 查询)。
我已经访问了 Pig 邮件列表,但我还没有找到一个好的解决方案,因为 Pig 并没有真正对 JOIN 执行“或”操作。我知道这个问题有多奇怪。
(如果有人确实知道如何在 Pig 中完成此操作,我不会反对查看它......)
编辑:有谁知道这在 Hive 中是否会更容易,也许?