Podróże w czasie płatka śniegu

Płatek śniegu to wiodąca usługa przechowywania i analizy danych w chmurze, która zapewnia różne rozwiązania dla hurtowni danych, inżynierii danych, modelowania AI/ML i innych powiązanych usług. Posiada wiele funkcji i funkcjonalności; jedną z potężnych funkcji odzyskiwania danych jest podróż w czasie. Umożliwia ona użytkownikom dostęp do danych historycznych z przeszłości. Jest to korzystne, gdy użytkownik napotka którykolwiek z poniższych scenariuszy:

  • Pobieranie poprzedniej wartości wiersza lub kolumny przed bieżącą Operacja DML
  • Odzyskiwanie ostatniego stanu danych w celu utworzenia kopii zapasowej lub redundancji
  • Pomyłkowa aktualizacja lub usunięcie rekordów z tabeli
  • Przywrócenie poprzedniego stanu tabeli, schematu lub bazy danych

Ciągły cykl życia ochrony danych Snowflake umożliwia podróż w czasie w oknie od 1 do 90 dni. W przypadku wersji Enterprise dozwolona jest retencja do 90 dni.

Rozszerzenia SQL Time Travel

Podróż w czasie można osiągnąć za pomocą Przesunięcia, Znaczniki czasu, oraz Oświadczenia słowa kluczowe oprócz AT lub BEFORE klauzula.

Offset

Jeśli użytkownik chce pobrać przeszłe dane lub odzyskać tabelę ze starszych danych stanu przy użyciu parametrów czasowych, może użyć poniższego zapytania, gdzie offset jest zdefiniowany w sekundach.

SELECT * FROM any_table AT(OFFSET => -60*5); -- For 5 Minutes 
CREATE TABLE recoverd_table CLONE any_table AT(OFFSET => -3600); -- For 1 Hour

Timestamp

Załóżmy, że użytkownik chce zapytać o dane z przeszłości lub odzyskać schemat dla określonego znacznika czasu. Następnie użytkownik może wykorzystać poniższe zapytanie.

SELECT * FROM any_table AT(TIMESTAMP => 'Sun, 05 May 2024 16:20:00 -0700'::timestamp_tz);
CREATE SCHEMA recovered_schema CLONE any_schema AT(TIMESTAMP => 'Wed, 01 May 2024 01:01:00 +0300'::timestamp_tz);

Oświadczenie

Użytkownicy mogą również użyć dowolnego unikalnego identyfikatora zapytania, aby uzyskać najnowsze dane do momentu oświadczenie.

SELECT * FROM any_table BEFORE(STATEMENT => '9f6e1bq8-006f-55d3-a757-beg5a45c1234');
CREATE DATABASE recovered_db CLONE any_db BEFORE(STATEMENT => '9f6e1bq8-006f-55d3-a757-beg5a45c1234');

Poniższe polecenie ustawia czas retencji danych i zwiększa go lub zmniejsza.

CREATE TABLE any_table(id NUMERIC, name VARCHAR, created_date DATE) DATA_RETENTION_TIME_IN_DAYS=90;
ALTER TABLE any_table SET DATA_RETENTION_TIME_IN_DAYS=30;

Jeśli retencja danych nie jest wymagana, możemy również użyć polecenia SET DATA_RETENTION_TIME_IN_DAYS=0;.

Obiekty, które nie mają jawnie zdefiniowanego okresu retencji, mogą dziedziczyć okres retencji z wyższego poziomu obiektu. Na przykład tabele, które nie mają określonego okresu przechowywania, będą dziedziczyć okres przechowywania ze schematu, a schemat, który nie ma zdefiniowanego okresu przechowywania, będzie dziedziczyć z poziomu bazy danych. Poziom konta jest najwyższym poziomem hierarchii i powinien być ustawiony na 0 dni dla przechowywania danych.

Proszę teraz rozważyć przypadek, w którym tabela, schemat lub baza danych zostaną przypadkowo usunięte, powodując utratę wszystkich danych. W takich przypadkach, gdy jakikolwiek obiekt danych zostanie upuszczony, jest on przechowywany w zapleczu Snowflake do okresu przechowywania danych. W takich przypadkach Snowflake ma podobną świetną funkcję, która przywróci te obiekty za pomocą poniższego kodu SQL.

UNDROP TABLE any_table;
UNDROP SCHEMA any_schema;
UNDROP DATABASE any_database;

Jeśli użytkownik utworzy tabelę o tej samej nazwie co tabela upuszczona tabela, wówczas Snowflake tworzy nową tabelę, a nie przywraca starą. Kiedy użytkownik używa powyższego UNDROP Snowflake przywraca stary obiekt. Ponadto użytkownik potrzebuje uprawnień lub własności, aby przywrócić obiekt.

Po upływie okresu Time Travel, jeśli obiekt nie zostanie odzyskany w okresie przechowywania danych, jest przenoszony do Snowflake Fail-Safe, gdzie użytkownicy nie mogą wykonywać zapytań. Jedynym sposobem na odzyskanie danych jest skorzystanie z pomocy Snowflake, która przechowuje dane przez maksymalnie 7 dni.

Wyzwania

Podróże w czasie, choć przydatne, wiążą się z kilkoma wyzwaniami, jak pokazano poniżej.

  • Podróż w czasie ma domyślną jednodniową konfigurację dla tabel przejściowych i tymczasowych w Snowflake.
  • Wszelkie obiekty z wyjątkiem tabel, takie jak widoki, UDF i procedury składowane, nie są obsługiwane.
  • Jeśli tabela zostanie odtworzona z tą samą nazwą, odwołanie się do starszej wersji o tej samej nazwie wymaga zmiany nazwy bieżącej tabeli, ponieważ domyślnie Time Travel będzie odwoływać się do najnowszej wersji.

Wnioski

Funkcja Time Travel jest szybka, łatwa i wydajna. Jest zawsze przydatna i zapewnia użytkownikom większy komfort podczas pracy z danymi wrażliwymi na produkcję. Wspaniałą rzeczą jest to, że użytkownicy mogą uruchamiać te zapytania samodzielnie, bez konieczności angażowania administratorów. Dzięki maksymalnej retencji danych wynoszącej 90 dni, użytkownicy mają więcej niż wystarczająco dużo czasu, aby cofnąć się w czasie lub naprawić nieprawidłowo zaktualizowane dane. Moim zdaniem to właśnie Snowflake najsilniejsza funkcja.

Odnośnik