2016-08-15 2 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'; 

Примечание: Я подтверждено этот запрос в моей среде, я получил excpetion Synamtic из-за «стол не found'and не получил какого-либо синтаксические ошибки enter image description here

+0

Большое спасибо Адди за вашу большую помощь, – smisra3