我在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窗口中查询视图最终会将视图还原为其原始定义。
答案 0 :(得分: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
(默认情况下,非超级用户将只能查看查询信息)他们自己已经执行了)。