使用 CTE 创建的 Hadoop 视图行为不当

问题描述 投票:0回答:1

这是视图定义(运行良好。视图已创建)

CREATE OR REPLACE VIEW my_view 
AS WITH Q1 
AS (SELECT MAX(LOAD_DT) AS LOAD_DT FROM load_table WHERE UCASE(TBL_NM) = 'FACT_TABLE') 
SELECT F.COLUMN1
, F.COLUMN2
FROM   Q1, FACT_TABLE F 
WHERE  Q1.LOAD_DT = F.TRAN_DT
;

但是,当运行时

SELECT * from my_view;

收到以下错误消息:

失败:SemanticException 行 N:M 在视图 my_view 的定义中找不到“Q1”表....等..

看起来 hive 正在尝试将 Q1(即 CTE)视为物理表。有什么想法可以解决这个问题吗?

谢谢你

hadoop view common-table-expression
1个回答
0
投票

我们在我们的环境中也遇到过类似的问题。回答你的问题,这是 Hive 中的一个错误。幸运的是,我们有一个解决方法可以让它发挥作用。如果您使用 impala 和 hive 并且两者都使用相同的元存储。在 Impala 中创建视图,它将在 hive 和 impala 上运行。

原因: Hive 正在将您的数据库名称附加到创建的导致问题的 CTE 引用中。

谢谢, 尼奥

© www.soinside.com 2019 - 2024. All rights reserved.