我正在尝试将数据从mysql迁移到hive。当使用IN子句的语句时,我无法编写子查询案例。这是我的查询。在这方面你能帮忙吗? AM我没有遵循正确的语法。
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
答案 0 :(得分:2)
根据Hive Language Manual:“Hive仅在FROM
子句中支持子查询。”
您的CASE WHEN
是SELECT
子句的一部分,但它包含一个SELECT
子查询。似乎不支持,因此您的语法不正确(在Hive中)。
也许您可以使用您拥有的查询在MySQL中暂存数据,然后使用简单的SELECT
将其加载到Hive中而不使用CASE WHEN
?
答案 1 :(得分:0)
见official document。 它说
假设
我们计划通过以下假设和限制来限制范围。
子查询只能是SELECT中的顶级表达式。也就是说,现在不支持复杂表达式,聚合,UDF等中的子查询