0
我想将下面的SQL请求转换成PIG脚本。 我的问题是我目前正在使用很多JOIN
进脚本,这似乎使得PIG运行缓慢。如何将简单的SQL请求转换为Apache PIG脚本?
如何优化代码?
SQL请求:
Select distinct
A.somethingA1, A.somethingA2, A.somethingA3,
B.somethingB1, B.somethingB2, B.somethingB3,
C.somethingC1, C.somethingC2,
D.getFieldX as fieldX,
F.somethingF1
From
TABLE_A A,
TABLE_B B,
TABLE_C C,
TABLE_D D,
TABLE_E E,
TABLE_F F
Where
A.getField1 = B.getField1
And A.getField2 = E.getField2
And A.getField3 = C.getField3
And A.getField3 = D.getField4
And A.getField5 = F.getField6
And F.getField7 = D.getField7
And D.getFieldX = 'X'
我需要使用几个JOIN
逐一即使这可能会产生这么多场巨大的最终目标?或者我可以使用简单的FILTER
吗?
其实,我不确定我可以在不同表格的数据上使用FILTER
。我可以吗 ?
到目前为止,我一直在脚本中至少使用5 JOIN
,而且看起来没有任何优化! 这里就是我所做的:
A = load 'TABLE_A' using avrostorage();
B = load 'TABLE_B' using avrostorage();
C = load 'TABLE_C' using avrostorage();
D = load 'TABLE_D' using avrostorage();
E = load 'TABLE_E' using avrostorage();
F = load 'TABLE_F' using avrostorage();
data1 = JOIN A by getField1, B by getField1;
data1 = FOREACH data GENERATE A::somethingA1, A::somethingA2, A::somethingA3, A::getField2, A::getField3, B::somethingB1, B::somethingB2, B::somethingB3;
data2 = JOIN data1 by getField2, E by getField2;
data2 = FOREACH data2 GENERATE data1::A::somethingA1, data1::A::somethingA2, data1::A::somethingA3, data1::A::getField2, data1::A::getField3, data1::B::somethingB1, data1::B::somethingB2, data1::B::somethingB3;
dump data2;
describe data2;
等等等等。直到达到最终桌。
谢谢。
您使用的是MySQL还是Oracle? (不要标记不涉及的产品。) – jarlh
今天提示:切换到现代,明确的'JOIN'语法!易于编写(没有错误),更易于阅读和维护,并且在需要时更容易转换为外部联接。 – jarlh
@jarlh对不起,我不明白MySQL或Oracle?我实际上都使用..你明确的'JOIN'是什么意思?这就是我目前正在使用的原因。 – hacks4life