テーブルA
とB
の両方にパーティションキーとしてds
があるとします。2つのテーブルを結合し、パーティションキーをフィルタリングするこれらの2つのHiveクエリのパフォーマンスに違いはありますか?
方法1
SELECT *
FROM A JOIN B ON A.userid=B.userid
WHERE A.ds='2014-01-01' AND B.ds='2014-01-01'
方法2
SELECT *
FROM (
SELECT * FROM A WHERE A.ds='2014-01-01'
) JOIN (
SELECT * FROM B WHERE B.ds='2014-01-01'
) ON
A.userid=B.userid
第二のクエリは速くなりますか?
WHERE
とJOIN
がHiveでどのように機能しているのでしょうか。できるだけ結合前にソーステーブルにwhere
句を適用するか(上記のような句に1つのテーブルエイリアスが含まれている限り)、またはテーブルが結合された後にのみ適用されます(たとえばA.userid > B.userid
を適用する必要があります)。参加後)?
ありがとうございました! btw、このような深い詳細を議論するHiveの本はありますか? –
oreillyの本は最も人気のあるものです(Google oreillyハイブ)。 Apacheのwikiとハイブメーリングリスト(http://hive.apache.org/mailing_lists.html)以外の情報源 – dimamah