2017-04-06 9 views
0

ハイブでクエリビルドを行っていますが、そのクエリは以下のとおりです。左外部結合を行っているときのハイブの日付フィルタ

*

Select * from CSS407 
LEFT OUTER JOIN PROD_CORE.SERV_ACCT_ISVC_LINK SASP 
ON CSS407.TABLE_ABBRV_CODE = 'SACT' 
AND CSS407.EVENT_ITEM_REF_NUM = SASP.Serv_Acct_Id 
AND to_date(CSS407.EVENT_RTS_VAL) >= SASP.Acct_Serv_Pnt_Strt_Dt 
AND to_date(CSS407.EVENT_RTS_VAL) < SASP.Acct_Serv_Pnt_End_Dt 
LEFT OUTER JOIN PROD_CORE.CUST_ACCT_SA_LINK ASA 
ON CSS407.TABLE_ABBRV_CODE = 'SACT' 
AND CSS407.EVENT_ITEM_REF_NUM = ASA.Serv_Acct_Id 
AND CSS407.EVENT_RTS_VAL_UTC_DTTM >= ASA.Acct_Relt_Strt_Dttm 
AND CSS407.EVENT_RTS_VAL_UTC_DTTM < ASA.Acct_Relt_End_Dttm 
LEFT OUTER JOIN PROD_CORE.CUST_SA_LINK ASAT 
ON CSS407.TABLE_ABBRV_CODE = 'TACT' 
AND CSS407.EVENT_ITEM_REF_NUM = ASAT.Serv_Acct_Id 
AND CSS407.EVENT_RTS_VAL_UTC_DTTM >= ASAT.Acct_Relt_Strt_Dttm 
AND CSS407.EVENT_RTS_VAL_UTC_DTTM < ASAT.Acct_Relt_End_Dttm 

*

私はハイブで、上記の表を実行していたとき、私は

「左と右の両方の別名は 『SASP』を登録しようで遭遇した」以下のエラーを取得しています

さらに調査したところ、条件付きで結合のフィルタの間に日付を使用できないことがわかりました。すべての投稿で誰もその条件にどこのフィルタを挿入するよう求めています。

しかし、私たちのケースでは、フィルタ間でその日付を移動している場合、条件が満たされていない場合、左外部結合が満足のいくものではないため、データが得られません。

私はHIVEで実行中にこの問題を得て、それは助けてくださいTeradataのとOracle

で正常に動作しています。

+0

複数のLEFT JOIN –

+0

P.s.を使用してそれ以外の解決方法がある可能性があるので、実際のSELECT句を(おそらく '選択* 'ではなく)共有してください。私はあなたが各結合テーブルから単一のレコードを取得すると仮定? –

+0

結合テーブルに主キーがありますか? –

答えて

-1

CSS407とSERV_ACCT_ISVC_LINKの間に共通の列があり、このエラーが発生している可能性があります。

+0

いいえ、select *を実行しているため、すべての列にエイリアスを指定しても問題は発生しません –

0

Hive.Moveでの結合条件で等値(=)のみが使用されます< = to where句。

私も同様の問題があります。以下のスレッドを確認してください。

Hive Select MAX() in Join Condition

は、この情報がお役に立てば幸いです。

関連する問題