【问题标题】:Redshift View keeps reverting to previous definitionRedshift View 不断恢复到以前的定义
【发布时间】:2019-02-22 19:16:28
【问题描述】:

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

【问题讨论】:

  • Redshift 不会自行将对象恢复到以前的定义,因为它没有任何以前定义的记录。我的猜测是一些外部过程正在覆盖您的更改,或者您可能在不同的架构(例如公共)中有多个具有相同名称的视图,并且用户/会话/工具的默认架构不同。
  • Redshift 不会这样做。其他东西正在覆盖这个视图。

标签: view amazon-redshift


【解决方案1】:

Redshift 不应该拥有可以恢复到的视图先前 DDL 的“内存”。我倾向于同意 cmets 的观点,即在您提交视图 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(默认情况下,非超级用户将只能查看他们查询的信息他们已经被处决了)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多