我正在尝试将数据从 mysql 迁移到 hive。我无法使用 IN 子句编写子查询 case when 语句。这是我的查询。您能在这方面提供帮助吗?我没有遵循正确的语法。
CREATE TABLE HIVE_TPCE_TEMP.TMP_CDMA_CD AS
SELECT A.DRI,C.BOUND_ID,A.CT_ID,A.CD_ID,A.CID,
A.TID,A.TASK_SEQ_ID,A.DIV_ID,C.BLOCK_GROUP_ID,C.ZIP_CODE,C.ROAD_CATEGORY_ID,A.RXPOWER,"${hiveconf:C_CDMA_DEVICE_ONLINE_RXPOWER_METRIC_ID}" METRIC_ID,
CASE WHEN
((A.DRI,A.DIV_ID,A.RFID) in (SELECT DRI,DIV_ID,HOME_RFID FROM HIVE_TPCE_TEMP.TMP_HOME_NETWORKS)) THEN
CASE WHEN MODE IN ('A','N') THEN "${hiveconf:HAD}" ELSE "${hiveconf:HD}" END
WHEN (COALESCE(A.RFID,0) = 0) AND ((A.DRI,A.DIV_ID,D.FR,D.SUBBAND) IN (SELECT DRI,DIV_ID,HOME_FR,
HOME_SUBBAND FROM HIVE_TPCE_TEMP.TMP_HOME_NETWORKS))
THEN CASE WHEN MODE IN ('A','N') THEN "${hiveconf:HAD}" ELSE "${hiveconf:HD}" END
ELSE CASE WHEN MODE IN ('A','N') THEN "${hiveconf:PAI}" ELSE "${hiveconf:PDI}" END END HPDA_ID
FROM HIVE_TPCE.VW_CDMA_CD A INNER JOIN HIVE_TPCE.STG_CURRENT_FILES B
ON A.DRI = B.DRI AND A.SOURCE_FILE_ID = B.SOURCE_FILE_ID
INNER JOIN
HIVE_TPCE.WRK_LOCATION C
ON A.DRI = C.DRI AND A.LOCATION_ID = C.LOCATION_ID
INNER JOIN
HIVE_TPCE.LU_RADIO D
ON A.RADIO_ID = D.RADIO_ID WHERE A.CID > 0 AND D.MODE IN ('A','N') AND A.RXPOWER IS NOT NULL AND A.CALL_RESULT_ID BETWEEN 1 AND 16;
我的错误签名是
FAILED: ParseException line 10:42 mismatched input ',' expecting ) near 'DRI' in expression specification
最佳答案
根据Hive Language Manual :“Hive 仅在 FROM
子句中支持子查询”。
您的 CASE WHEN
是 SELECT
子句的一部分,但它包含一个 SELECT
子查询。似乎不支持这一点,因此您的语法不正确(在 Hive 中)。
也许您可以使用您拥有的查询将数据暂存到 MySQL 中,然后使用简单的 SELECT
(无需使用 CASE WHEN
)将其加载到 Hive 中?
关于sql - HIVE - hive 子查询不适用于带有 IN 子句的 case when 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16588622/