inやhiveに存在するなどのサブクエリのサポートと使用法



Support Usage Subqueries Such



ケースの状況:同僚が会社のデータを使用して、コードの一部を調査して実行しました。いくつかのコードは次のとおりです。のサブクエリがサポートされていないことを示すエラーが報告されます。ただし、仮想マシンを直接実行するために使用する場合、コードはエラーを報告せず、結果は非常に奇妙です。

SELECT t1.SIGN_CODE AS bus_src ,t1.ORGANIZATION_NO ,t3.loan_amts ,t4.restSum ,NULL AS c1 ,NULL AS c2 ,NULL AS c3 ,t5.draft_cnt ,t5.draft_amt ,t5.draft_amt AS draft_balance ,NULL AS c4 FROM FDM_SOR.SOR_EVT_TBL_FB_CUST t1 where t1.FB_CUST_CODE in ( select e.CUST_CODE from FDM_SOR.SOR_EVT_TBL_FB_CREDIT e where e.COMPANY_CODE='5103' ) and t1.FB_CUST_CODE in ( select e.FB_CUST_CODE from FDM_SOR.SOR_EVT_TBL_FB_LOAN e where CURRENT_SETTLE_FLAG != 1 )

Baiduは少し時間を取って、サブクエリに対するHiveのサポートは非​​常に限られていると述べました。これは、サブクエリがSELECTステートメントのFROM句に表示されることのみを許可します。 Hiveが作成したサブクエリをサポートしていない場合は、結合操作として作成できるかどうかを確認できます。たとえば、INサブクエリは半結合または結合として記述できます。



次のように、結合を使用してのサブクエリを置き換えます

SELECT t1.SIGN_CODE AS bus_src ,t1.ORGANIZATION_NO ,t1.loan_amts ,t1.restSum ,NULL AS c1 ,NULL AS c2 ,NULL AS c3 ,t1.draft_cnt ,t1.draft_amt ,t1.draft_amt AS draft_balance ,NULL AS c4 FROM FDM_SOR.SOR_EVT_TBL_FB_CUST t1 inner join( select e.CUST_CODE as FB_CUST_CODE from FDM_SOR.SOR_EVT_TBL_FB_CREDIT e where e.COMPANY_CODE='5103' ) a11 on t1.FB_CUST_CODE = a11.FB_CUST_CODE inner join ( select e.FB_CUST_CODE from FDM_SOR.SOR_EVT_TBL_FB_LOAN e where CURRENT_SETTLE_FLAG != 1 ) c11 on t1.FB_CUST_CODE = c11.FB_CUST_CODE ただし、サブクエリは仮想マシンで実行できるため、Hiveはでクエリをサポートする必要がありますが、Webインターフェイスプローブを使用して実行するとエラーになるのはなぜですか。だから、ハイブの公式ウェブサイトをチェックしてください。ハイブの公式ウェブサイトで問題を見つけてください。 Hiveは、バージョン0.13以降、サブクエリ内とサブクエリではないなど、より多くのサブクエリをサポートしていることがわかりました。使用するハイブがin、exists、inではなくなどのサブクエリをサポートしていない場合は、0.13より前の古いバージョンである可能性があります。