středa 13. srpna 2014

Vertica a historické dotazy

Sloupcová databáze Vertica má zajímavou vlastnost, která umožňuje dělat dotazy i na již neexistující data (smazaná nebo změněná).
Syntaxe vypadá tak, že se před běžný dotaz SELECT předřadí čas, ve kterém nás zajímá stav dat:

at time '2014-08-13 00:30:00' select * from moje;

Celé to funguje tak, že Vertica po operaci DELETE nemaže smazané řádky přímo, ale jenom je jako smazané označí. Operaci UPDATE Vertica implementuje jako smazání řádku a vložení nového (DELETE+INSERT).

Metadatům o smazaných řádcích Vertica říká delete vektory a jejich stav můžeme zjistit ze systémové tabulky delete_vectors:

select projection_name,sum(deleted_row_count) as deleted_row_count,floor(sum(used_bytes)/1024) as used_kb from delete_vectors group by projection_name order by projection_name;
 projection_name | deleted_row_count | used_kb 
-----------------+-------------------+---------
 moje_super      |                 5 |      16

To, jak daleko do historie Vertica "vidí", se konfiguruje pomocí parametrů HistoryRetentionTime (počet sekund) nebo HistoryRetentionEpochs (počet zpětně uchovávaných epoch). Pokud oba parametry nastavíme na -1, Vertica si bude smazaná data pamatovat navždy.

Seznam aktuálních epoch můžeme zjistit ze systémové tabulky epochs:

select * from epochs;
       epoch_close_time        | epoch_number 
-------------------------------+--------------
 2014-08-13 12:05:52.71345+02  |        16259
 2014-08-13 14:49:47.034859+02 |        16260
 2014-08-13 14:49:47.04223+02  |        16261

Pro zjištění údajů o aktuální epoše můžeme využít funkce:

select GET_AHM_TIME() as time, GET_AHM_EPOCH() as epoch;
                      time                      | epoch
------------------------------------------------+-------
 Current AHM Time: 2014-08-13 14:49:47.04223+02 | 16261

AHM znamená Ancient History Mark a je to značka, označující nejstarší uchovávanou epochu -- starší epochy je možné smazat.

AHM je možné nastavit i ručně, funkcemi SET_AHM_TIME (nastaví AHM na daný čas),
SET_AHM_EPOCH (nastaví AHM na danou epochu), MAKE_AHM_NOW (nastaví AHM na aktuální čas).

Skutečné mazání dat (PURGE) z epoch starších než AHM řídí Vertica automaticky nebo je můžeme vyvolat ručně.
O automatiku se stará komponenta Tuple mover při provádění operace mergeout -- neplést s operací moveout, která přesouvá data z Write Optimized Storage (WOS) do Read Optimized Storage (ROS).
Ruční purge můžeme provést funkcemi PURGE_TABLE (provede purge dat v dané tabulce a všech jejích projekcích), PURGE_PROJECTION (provede purge dat v dané projekci) a PURGE (provede purge v celém databázovém schématu).

Žádné komentáře:

Okomentovat