Redshift View保持恢复到先前的定义

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

我在Redshift中创建了一个视图,它可以处理两个查询,并且效果很好。我们已经想到了第三个值得添加的查询。例如

CREATE VIEW stem_alumni as
SELECT name, email
FROM students
WHERE graduated < 2019 AND major = 'Engineering'

UNION 
SELECT name, email
FROM alumni
WHERE current_employer = 'Google'

问题是当我尝试添加第三个查询时

UNION
SELECT name, email
FROM professors
WHERE department = 'Engineering'

它会持续一个小时,但之后会恢复原始查询。

我运行CREATE OR REPLACE VIEW...并删除/重新创建并获得相同的结果。

如何保持更新的视图定义?

添加更多上下文

我使用DBeaver创建了视图,DBeaver是一个使用我特定Redshift凭据的本地SQL客户端。该视图由Periscope调用,Periscope是我们基于云的BI工具,使用共享凭据。在Periscope中查询视图或单独的DBeaver窗口最终会将视图恢复为其原始定义。

view amazon-redshift
1个回答
1
投票

Redshift不应该具有可以恢复的视图的先前DDL的“记忆”。我倾向于同意这样的评论:在您提交视图后,其他内容会覆盖视图DDL的更新。

您应该能够通过查询stl_query表来查看某些内容是否覆盖了该视图:

SELECT q.starttime
     , u.usename
     , q.querytxt
FROM pg_user u
  JOIN stl_query q ON u.usesysid = q.userid
WHERE POSITION('<view_name>' IN q.querytxt) > 0
ORDER BY q.starttime DESC
;

此表仅包含最近的查询信息(根据Redshift Documentation为2-5天),因此如果您未在该时间范围内的视图中遇到此行为,则可能需要强制它再次发生以便对谁/什么进行故障排除正在改变DDL。

此外,如果视图被您以外的用户覆盖,则需要使用超级用户帐户查询stl_query(默认情况下,非超级用户只能查看他们自己执行的查询的信息)。

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