2016-08-15 36 views
0

請將以下TeraData查詢轉換爲Hive ..我是Hive新手,無法將其轉換。 請指導如何轉換Case ..將Teradata轉換爲Hive時。 雖然converting..I我得到很多的錯誤將TeraData查詢轉換爲Hive

SELECT 

MLOC.MATL_LOC_ID, 
MLOC.MATL_ID, 
MLOC.LOC_PRTY_ID, 
MLOC.SRC_SYS_CD, 
MLOC.PLNT_CD, 
MLOC.PRCTR_SGMNT_ID, 
MLOC.PRCTR_CD, 
MLOC.CC_SGMNT_ID, 
MLOC.CC_CD, 
MLOC.CNTL_AREA_NUM, 
MLOC.DFLT_MATL_PLNT_DESC, 
MLOC.VALUATION_CATEGORY_CD, 
MLOC.DMND_PLNT_CD, 
MLOC.SFTY_STK_QTY, 
MLOC.MATL_ABC_CLSN_CD MATL_ABC_CLSN_CD_ORIG, 

    case when (MATL_ABC_CLSN_CD is null or trim(MATL_ABC_CLSN_CD)='' or MATL_ABC_CLSN_CD='#') then 'NOT DEFINED' 
    when MATL_ABC_CLSN_CD not in ('A','B','C','D','Z') then 'C' 
    else MATL_ABC_CLSN_CD end MATL_ABC_CLSN_CD_DERV, 

     case when src_sys_cd in ('M07','M02','M09','M18','M22','M25','M27') and MATL_ABC_CLSN_CD_DERV = 'A' then '98%' 
    when src_sys_cd in ('M07','M02','M09','M18','M22','M25','M27') and MATL_ABC_CLSN_CD_DERV in ('B','C','D','Z') then '96%' 

    when src_sys_cd in ('M17','M03','M21') and MATL_ABC_CLSN_CD_DERV = 'A' then '99%' 
    when src_sys_cd in ('M17','M03','M21') and MATL_ABC_CLSN_CD_DERV in ('B','C','D') then '98%' 

     when src_sys_cd in ('M01','M10') and MATL_ABC_CLSN_CD_DERV = 'A' then '99%' 
    when src_sys_cd in ('M01','M10') and MATL_ABC_CLSN_CD_DERV in ('B','C','D') then '97%' 

    when src_sys_cd in ('M26','M29') and MATL_ABC_CLSN_CD_DERV = 'A' then '96%' 
    when src_sys_cd in ('M26','M29') and MATL_ABC_CLSN_CD_DERV in ('B','C','D') then '94%' 

    else 'NOT DEFINED' end ITEM_SERV_LVL_TGT, 

    ((MLOC.SFTY_STK_QTY * MAU.FACT_NUMRTR_MEAS)/MAU.FACT_DENOM_MEAS) AS "SFTY_STK_QTY_IN_EACHES", 
    REPLENISHMENT_LEAD_DAY_CNT, 
REPLENISHMENT_PRCS_CD 

FROM SCMAIN_V.MATL_LOC MLOC 

LEFT OUTER JOIN 
(
SELECT 
MATL_ID, BASE_UOM_CD , ALT_UOM_CD,FACT_NUMRTR_MEAS,FACT_DENOM_MEAS,FINANCIAL_SYSTEM_ID 
FROM 
SCMAIN_V.MATL_ALT_UOM 
WHERE ALT_UOM_CD = 'EA' 
AND TRIM(SRC_SYS_CD) LIKE 'M%' 
QUALIFY ROW_NUMBER() OVER(PARTITION BY 
MATL_ID, BASE_UOM_CD 
ORDER BY DAI_UPDT_DTTM DESC, FACT_DENOM_MEAS ASC)=1 
) MAU 
ON MLOC.MATL_ID = MAU.MATL_ID 
AND MLOC.BASE_UOM_CD = MAU.BASE_UOM_CD 

WHERE MLOC.SYS_VLD_TO_DT = TIMESTAMP '9999-12-31 00:00:00' 

); 

回答

2

我認爲你需要重寫 'QUALIFY ROW_NUMBER()OVER(...)' 操作「SELECT ROW_NUMBER OVER(... )WHERE ROWNUM ='在您的內部查詢中操作,因爲配置單元尚未支持QUALIFY的使用

將所有查詢從包括CASE的配置單元看起來都很好。 另一個小問題是在「SFTY_STK_QTY_IN_EACHES」使用雙引號。

下面是修改查詢,你可以嘗試使用:

SELECT 
MLOC.MATL_LOC_ID, 
MLOC.MATL_ID, 
MLOC.LOC_PRTY_ID, 
MLOC.SRC_SYS_CD, 
MLOC.PLNT_CD, 
MLOC.PRCTR_SGMNT_ID, 
MLOC.PRCTR_CD, 
MLOC.CC_SGMNT_ID, 
MLOC.CC_CD, 
MLOC.CNTL_AREA_NUM, 
MLOC.DFLT_MATL_PLNT_DESC, 
MLOC.VALUATION_CATEGORY_CD, 
MLOC.DMND_PLNT_CD, 
MLOC.SFTY_STK_QTY, 
MLOC.MATL_ABC_CLSN_CD MATL_ABC_CLSN_CD_ORIG, 

    case when (MATL_ABC_CLSN_CD is null or trim(MATL_ABC_CLSN_CD)='' or MATL_ABC_CLSN_CD='#') then 'NOT DEFINED' 
    when MATL_ABC_CLSN_CD not in ('A','B','C','D','Z') then 'C' 
    else MATL_ABC_CLSN_CD end MATL_ABC_CLSN_CD_DERV, 

     case when src_sys_cd in ('M07','M02','M09','M18','M22','M25','M27') and MATL_ABC_CLSN_CD_DERV = 'A' then '98%' 
    when src_sys_cd in ('M07','M02','M09','M18','M22','M25','M27') and MATL_ABC_CLSN_CD_DERV in ('B','C','D','Z') then '96%' 

    when src_sys_cd in ('M17','M03','M21') and MATL_ABC_CLSN_CD_DERV = 'A' then '99%' 
    when src_sys_cd in ('M17','M03','M21') and MATL_ABC_CLSN_CD_DERV in ('B','C','D') then '98%' 

     when src_sys_cd in ('M01','M10') and MATL_ABC_CLSN_CD_DERV = 'A' then '99%' 
    when src_sys_cd in ('M01','M10') and MATL_ABC_CLSN_CD_DERV in ('B','C','D') then '97%' 

    when src_sys_cd in ('M26','M29') and MATL_ABC_CLSN_CD_DERV = 'A' then '96%' 
    when src_sys_cd in ('M26','M29') and MATL_ABC_CLSN_CD_DERV in ('B','C','D') then '94%' 

    else 'NOT DEFINED' end ITEM_SERV_LVL_TGT, 

    ((MLOC.SFTY_STK_QTY * MAU.FACT_NUMRTR_MEAS)/MAU.FACT_DENOM_MEAS) AS SFTY_STK_QTY_IN_EACHES, 
    REPLENISHMENT_LEAD_DAY_CNT, 
REPLENISHMENT_PRCS_CD 

FROM SCMAIN_V.MATL_LOC MLOC 

LEFT OUTER JOIN 
(
SELECT 
T.MATL_ID, T.BASE_UOM_CD , T.ALT_UOM_CD,T.FACT_NUMRTR_MEAS,T.FACT_DENOM_MEAS,T.FINANCIAL_SYSTEM_ID 
FROM 
(
SELECT 
MATL_ID, BASE_UOM_CD , ALT_UOM_CD,FACT_NUMRTR_MEAS,FACT_DENOM_MEAS,FINANCIAL_SYSTEM_ID,ROW_NUMBER() OVER(PARTITION BY 
MATL_ID, BASE_UOM_CD 
ORDER BY DAI_UPDT_DTTM DESC, FACT_DENOM_MEAS ASC) as ROWNUM FROM 
SCMAIN_V.MATL_ALT_UOM 
WHERE ALT_UOM_CD = 'EA' 
AND TRIM(SRC_SYS_CD) LIKE 'M%' 
) T 
WHERE T.ROWNUM=1 
) MAU 
ON MLOC.MATL_ID = MAU.MATL_ID 
AND MLOC.BASE_UOM_CD = MAU.BASE_UOM_CD 

WHERE MLOC.SYS_VLD_TO_DT = TIMESTAMP '9999-12-31 00:00:00'; 

注: 我已經驗證了我的環境中,該查詢時,我得到了Synamtic錯誤時拋出因「表中未found'and沒有得到任何語法錯誤 enter image description here

+0

非常感謝你的幫助, – smisra3