【问题标题】:cannot recognize input near 'SELECT' 'DISTINCT' '(' in expression specification -Hive无法识别表达式规范中的“SELECT”“DISTINCT”“(”附近的输入 -Hive
【发布时间】:2023-03-29 19:00:02
【问题描述】:

尝试在 hive 中执行以下查询。抛出异常无法识别表达式规范中 'SELECT' 'DISTINCT' '(' 附近的输入。感谢任何帮助。

SELECT DISTINCT (FISCAL_QUARTER_START_DATE)
      FROM TEST_STAGE.TEST_TABLE
     WHERE     FISCAL_YEAR_ID =
                  (SELECT FISCAL_YEAR_ID
                     FROM TEST_STAGE.TEST_TABLE
                    WHERE CALENDAR_DATE = FROM_UNIXTIME (UNIX_TIMESTAMP ()))
           AND SUBSTR (FISCAL_QUARTER_NAME, 0, 2) =
                  (SELECT SUBSTR (FISCAL_QUARTER_NAME, 0, 2)
                     FROM TEST_STAGE.TEST_TABLE
                    WHERE CALENDAR_DATE = FROM_UNIXTIME (UNIX_TIMESTAMP ()))

谢谢

【问题讨论】:

    标签: hive hiveql


    【解决方案1】:

    对子查询使用正确的表别名和IN 子句而不是=

    SELECT DISTINCT (t1.FISCAL_QUARTER_START_DATE)
    FROM TEST_STAGE.TEST_TABLE t1
    WHERE t1.FISCAL_YEAR_ID IN (
            SELECT t2.FISCAL_YEAR_ID
            FROM TEST_STAGE.TEST_TABLE t2
            WHERE t2.CALENDAR_DATE = FROM_UNIXTIME(UNIX_TIMESTAMP())
            )
        AND SUBSTR(t1.FISCAL_QUARTER_NAME, 0, 2) IN (
            SELECT SUBSTR(t3.FISCAL_QUARTER_NAME, 0, 2)
            FROM TEST_STAGE.TEST_TABLE t3
            WHERE t3.CALENDAR_DATE = FROM_UNIXTIME(UNIX_TIMESTAMP())
            );
    

    我认为您的查询是等效的,可以使用EXISTS 转换为单个子查询。

    SELECT DISTINCT t1.FISCAL_QUARTER_START_DATE
    FROM TEST_STAGE.TEST_TABLE t1
    WHERE EXISTS (
            SELECT 1
            FROM TEST_STAGE.TEST_TABLE t2
            WHERE SUBSTR(t1.FISCAL_QUARTER_NAME, 0, 2) = SUBSTR(t2.FISCAL_QUARTER_NAME, 0, 2)
                AND t1.FISCAL_YEAR_ID = t2.FISCAL_YEAR_ID
                AND t1.CALENDAR_DATE = FROM_UNIXTIME(UNIX_TIMESTAMP())
            );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-20
      • 2022-12-21
      • 1970-01-01
      • 2013-09-09
      • 2018-12-26
      • 2019-11-17
      • 2015-03-10
      • 1970-01-01
      相关资源
      最近更新 更多