Снежинка не обновляется - PullRequest
1 голос
/ 14 апреля 2020

У меня есть материализованные представления в Снежинке, которые не освежают. Ниже приведен базовый c пример того, что я делаю.

--Create table and insert two records
CREATE OR REPLACE TABLE T1 (ID INTEGER);
INSERT INTO T1 VALUES (1);
INSERT INTO T1 VALUES (2);

--Create materialized view on table
CREATE OR REPLACE MATERIALIZED VIEW VW_T1 AS SELECT ID AS AVG_ID FROM T1;

--Insert two more records after creating the materialized view
INSERT INTO T1 VALUES (3);
INSERT INTO T1 VALUES (4);

-- Show metadata
SHOW MATERIALIZED VIEWS LIKE '%T1';

Независимо от того, как долго я жду, вид не обновляется. Количество строк всегда равно 2. Behind_by всегда имеет значение.

Что я делаю не так. Я следил за устранением неисправностей в документации Snowflake, но безуспешно. https://docs.snowflake.com/en/user-guide/views-materialized.html#troubleshooting

Мариус

1 Ответ

2 голосов
/ 14 апреля 2020

Это ожидаемое поведение. Материализованные представления в виде снежинок отличаются от представлений в других базах данных. Два важных момента:

1) Снежинка автоматически и прозрачно поддерживает материализованные представления.

2) Материализованные представления всегда предоставляют текущие данные . Если запрос выполняется до того, как материализованное представление обновляется, Snowflake либо обновляет материализованное представление, либо использует обновленные части материализованного представления и извлекает все необходимые более новые данные из базовой таблицы.

Так что вам не нужно беспокоиться об обновлениях. Время от времени он будет обновляться в фоновом режиме (на основе некоторых критериев, таких как размер DML, количество DML, время). Когда он будет обновлен, вы сможете увидеть, когда проверили столбец refreshed_on в выходных данных команды SHOW.

---------- Дополнительная информация ----------- ---

MV хранит данные в своих собственных файлах данных. Команда SHOW показывает «когда данные обновляются», «сколько строк в них содержится» et c ... Мариус видел 2 строки, потому что у MV в этой точке было 2 строки. Когда Мариус добавит больше строк в исходную таблицу, MV не скопирует их сразу. Существуют некоторые пороговые значения, но если вы попытаетесь прочитать из MV, MV будет считывать дельту из исходной таблицы и постоянно предоставлять текущие данные. Пользователям не нужно беспокоиться о «behind_by», «refreshed_on» или «количестве строк» ​​(если задержка составляет несколько дней).

Таким образом, команда SHOW и MV работают, как и ожидалось.

...