Redshift View不断恢复为先前的定义

时间:2019-02-22 19:16:29

标签: view amazon-redshift

我在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窗口中查询视图最终会将视图还原为其原始定义。

1 个答案:

答案 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(默认情况下,非超级用户将只能查看查询信息)他们自己已经执行了)。