这是视图定义(运行良好。视图已创建)
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)视为物理表。有什么想法可以解决这个问题吗?
谢谢你
我们在我们的环境中也遇到过类似的问题。回答你的问题,这是 Hive 中的一个错误。幸运的是,我们有一个解决方法可以让它发挥作用。如果您使用 impala 和 hive 并且两者都使用相同的元存储。在 Impala 中创建视图,它将在 hive 和 impala 上运行。
原因: Hive 正在将您的数据库名称附加到创建的导致问题的 CTE 引用中。
谢谢, 尼奥