Presto/Trino, unix timestamp, window functions e daylight saving time¶
Se si usano window functions (es. LAG
) per calcolare delta tra timestamp Unix, il risultato "ignora" eventuali switch di ora legale/solare (correttamente, dato che un timestamp Unix conta esclusivamente il tempo che scorre).
Non è stato immediato trovare una soluzione che tenesse conto dello switch e che, quindi, aggiungesse/sottraesse l'ora di delta, e anche DATE_DIFF
non ha aiutato.
Una soluzione manuale è però possibile tramite la utils TIMEZONE_HOUR
, che restituisce il delta rispetto a UTC, quindi 1 o 2 ore a seconda del periodo dell'anno.
Example
SELECT
TIMEZONE_HOUR(unix_timestamp) - LAG(TIMEZONE_HOUR(unix_timestamp), 1, 0) OVER (
PARTITION BY partition_key
ORDER BY unix_timestamp
)
FROM my_table