2

我正在尝试将数据从 mysql 迁移到 hive。当使用 IN 子句的语句时,我无法编写子查询案例。这是我的查询。你能在这方面帮忙吗?我没有遵循正确的语法。

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 
4

2 回答 2

2

根据Hive 语言手册:“Hive 仅在FROM子句中支持子查询”。

CASE WHENSELECT子句的一部分,但它包括一个SELECT子查询。似乎不支持,因此您的语法不正确(在 Hive 中)。

也许您可以使用您拥有的查询在 MySQL 中暂存数据,然后使用简单的SELECTwithout将其加载到 Hive 中CASE WHEN

于 2013-05-17T15:14:56.117 回答
0

官方文档。它说

假设

我们计划通过以下假设和限制来限制范围。

子查询只能是 SELECT 中的顶级表达式。即目前不支持复杂表达式、聚合、UDF等中的子查询

于 2018-01-18T10:35:48.200 回答