Sql 配置单元-配置单元子查询无法处理带有IN子句的case when语句
我正在尝试将数据从mysql迁移到配置单元。当语句带有IN子句时,我无法编写子查询大小写。这是我的查询。在这方面你能帮忙吗。我没有遵循正确的语法Sql 配置单元-配置单元子查询无法处理带有IN子句的case when语句,sql,hive,Sql,Hive,我正在尝试将数据从mysql迁移到配置单元。当语句带有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
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
根据“配置单元仅在FROM
子句中支持子查询”
当是SELECT
子句的一部分,但它包含一个子查询时,您的大小写。这似乎不受支持,因此您的语法不正确(在配置单元中)
也许您可以使用现有的查询将数据暂存到MySQL中,然后使用一个简单的选择将其加载到Hive中,而不使用大小写,当时请参见。
上面说
假设
我们计划通过以下假设和限制限制范围
子查询只能是SELECT中的顶级表达式。也就是说,目前不支持复杂表达式、聚合、UDF等中的子查询
根据配置单元手册,WHERE和FROM子句中都支持子查询,但SELECT子句中绝对不支持子查询。