hive如何查询转换后的变量;失败:semanticexception[错误10004]

eqqqjvef  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(505)

我试图查询特定的格式化日期:
我有个问题:

SELECT 
    REGEXP_REPLACE(datewithoutdash,
    '^(\\d{2})(\\d{2})(\\d{2})(.*)$','20\\1-\\2-\\3') 
    datewithdash 
     FROM table1 WHERE datewithdash < "2016-11-10";

为什么不能在新变量上使用where子句?
我得到这个错误:
失败:semanticexception[error 10004]:行26:14无效的表别名或列引用“datewithdash”:(可能的列名为:…)

nbysray5

nbysray51#

配置单元无法识别别名。你需要把整个表达式再重复一遍。

jqjz2hbq

jqjz2hbq2#

在计算同一查询中的where子句时,配置单元不知道select子句中的别名列名。不幸的是,您要么将其嵌套,要么将转换函数复制到where子句中:

SELECT 
    REGEXP_REPLACE(datewithoutdash,
    '^(\\d{2})(\\d{2})(\\d{2})(.*)$','20\\1-\\2-\\3') as datewithdash 
FROM 
     table1 
WHERE 
    REGEXP_REPLACE(datewithoutdash,
    '^(\\d{2})(\\d{2})(\\d{2})(.*)$','20\\1-\\2-\\3')  < "2016-11-10";

select * from (
    SELECT 
        REGEXP_REPLACE(datewithoutdash,
        '^(\\d{2})(\\d{2})(\\d{2})(.*)$','20\\1-\\2-\\3') as datewithdash 
    FROM 
         table1 
    ) a
WHERE 
    datewithdash  < "2016-11-10";

另一个注意事项-该函数非常糟糕-您可能会使用内置的配置单元函数,如:

to_date(unix_timestamp(datewithoutdash,'yyMMdd'))

相反,它可能更清晰。

相关问题