在hive中使用数字比较连接查询

问题描述 投票:0回答:1

我在TEMP.total_labor_hours> =(.95 * M.MAX_HOURS)中遇到以下配置单元查询的问题,请建议我如何重写它

 `SELECT BAC,COUNTRY_CD,COUNT(*)
FROM DL_EDGE_LRF_GWM_13929_BASE_GWMCNPD_COGNOSDBO.RISK_IND_CALC_TEMP AS TEMP
INNER JOIN 
(SELECT LABOR_OPERATION_KEY,LABOR_OPERATION_CD,LABOR_OPERATION_CD_EN,MAKE,MODEL,MAX_HOURS
  FROM DL_EDGE_LRF_GWM_13929_BASE_GWMCNPD_COGNOSDBO.RISK_IND_03_TMP1) M
ON M.LABOR_OPERATION_KEY = TEMP.LABOR_OPERATION_KEY
AND TEMP.UMF_XREF_FINC_MKTG_DIV = M.MAKE
AND TEMP.UMF_XREF_FINC_BRAND = M.MODEL
AND TEMP.total_labor_hours >= (.95 * M.MAX_HOURS)
WHERE TEMP.transaction_type_key IN ('16','17') AND TEMP.PROCESS_STATUS_key = '11'
GROUP BY BAC,COUNTRY_CD`
hive
1个回答
0
投票

你不能在蜂巢中使用非equi连接。

使用where子句重写查询 -

 `SELECT BAC,COUNTRY_CD,COUNT(*)
FROM DL_EDGE_LRF_GWM_13929_BASE_GWMCNPD_COGNOSDBO.RISK_IND_CALC_TEMP AS TEMP , DL_EDGE_LRF_GWM_13929_BASE_GWMCNPD_COGNOSDBO.RISK_IND_03_TMP1 M
where M.LABOR_OPERATION_KEY = TEMP.LABOR_OPERATION_KEY
AND TEMP.UMF_XREF_FINC_MKTG_DIV = M.MAKE
AND TEMP.UMF_XREF_FINC_BRAND = M.MODEL
AND TEMP.total_labor_hours >= (.95 * M.MAX_HOURS) AND TEMP.transaction_type_key IN ('16','17') AND TEMP.PROCESS_STATUS_key = '11'
GROUP BY BAC,COUNTRY_CD`;

上面的查询将导致交叉连接,然后根据条件过滤数据。如果它花费更多时间然后更改连接条件,下面将是查询 -

 `SELECT BAC,COUNTRY_CD,COUNT(*)
FROM DL_EDGE_LRF_GWM_13929_BASE_GWMCNPD_COGNOSDBO.RISK_IND_CALC_TEMP AS TEMP
LEFT OUTER JOIN 
(SELECT LABOR_OPERATION_KEY,LABOR_OPERATION_CD,LABOR_OPERATION_CD_EN,MAKE,MODEL,MAX_HOURS
  FROM DL_EDGE_LRF_GWM_13929_BASE_GWMCNPD_COGNOSDBO.RISK_IND_03_TMP1) M
ON M.LABOR_OPERATION_KEY = TEMP.LABOR_OPERATION_KEY
AND TEMP.UMF_XREF_FINC_MKTG_DIV = M.MAKE
AND TEMP.UMF_XREF_FINC_BRAND = M.MODEL
where M.MAX_HOURS IS NOT NULL AND TEMP.total_labor_hours >= (.95 * M.MAX_HOURS)
TEMP.transaction_type_key IN ('16','17') AND TEMP.PROCESS_STATUS_key = '11'
GROUP BY BAC,COUNTRY_CD`
© www.soinside.com 2019 - 2024. All rights reserved.