2016-08-15 35 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