Redshift View продолжает возвращаться к предыдущему определению - PullRequest
0 голосов
/ 22 февраля 2019

Я создал представление в 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, локального клиента SQL, используя мои специальные учетные данные Redshift.Представление вызывается Periscope, нашим облачным BI-инструментом, использующим общие учетные данные.Запрос представления в Periscope или отдельных окнах DBeaver в конечном итоге вернет представление к его исходному определению.

1 Ответ

0 голосов
/ 27 февраля 2019

Redshift не должен иметь «память» предыдущего DDL представления, к которому он мог бы вернуться.Я склонен согласиться с комментариями о том, что что-то еще перезаписывает обновления DDL представления после того, как вы их зафиксировали.

Вы сможете увидеть, перезаписывает ли что-то представление, запросив stl_query table:

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
;

Эта таблица содержит только информацию о последних запросах (2-5 дней согласно документации Redshift ), поэтому, если вы не испытывали это поведение в представлении вВ этом временном интервале вам может потребоваться, чтобы это произошло снова, чтобы выяснить, кто / что изменяет DDL.

Кроме того, если представление перезаписывается пользователем, отличным от вас, вам нужно будет запросить stl_query, используя учетную запись суперпользователя (по умолчанию не суперпользователи смогут просматривать информацию только длязапросы, которые они сами выполнили).

...