次の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