influxDB Timezone vs Timeshift()

Yunus Emre Demir
3 min readNov 15, 2021

--

Timezone bilgisi influxdb 2.1.1 ile hayatımıza girdi. Aşağıda bu özelliği yakından inceleyeceğiz.

Timezone

Aslında burada gelen özellik sadece

aggregateWindow(every: 1d, fn:mean)

denildiğinde “hangi zaman dilimindeki 1 günün ortalamasını alayım?” sorununa çözüm getirmiş. Normalde bu fonksiyon UTC 00:00 — UTC 00:00 arası ortalamayı hesaplayıp yazacaktı. Ama bu saatler TR de 03:00–03:00 aralığına denk gelmekteydi. Yani 1d denildiğinde (Türkiye saatiyle, local 03:00–03:00 arası hesaplanarak) aslında yanlış bir ortalama alınmış oluyordu.

import “timezone”                                                                                                                                                 
option location = timezone.location(name: “Europe/Istanbul”)

timezone bilgisini alınca: “Tamam, ben istanbuldayım. O zaman ham datadaki (default olarak UTC tutulur.) sadece 21:00–21:00 arasını alayım. Böylelikle localde (istanbulda) 00:00–00:00 arasını hesaplamış olurum.” diyor. (Not: UTC 21:00 -> Turkey 00:00)

Özetle, sadece timezone bilgisini alarak, (UTC olan) ham datadaki 1 güne karşılık gelen saat aralıklarını/ başlangıç bitiş saatlerini buluyor. Raw datadaki time bilgisini çevirmiyor. (Raw datadaki tüm timelera +3 eklemiyor.) Timeshift fonksiyonu ile farklı bir bir çalışma düzeni var. Birbiri yerine kullanılmasa daha iyi olur.

Aşağıdaki SS’i incelemeden önce, “influxdb, View Raw Data ekranının sadece UTC zaman dilimini gösterir. Üstteki ayarlardan vs. değiştirilemez. Default ve değiştirilemez olarak UTC zaman gösterir.” bilgisini cebe koyalım. Aşağıda, timezone kullanılan ve kullanılmayan sorguların raw datası gözükmektedir. Sol kısımda timezone kullanılmadan bir günlük ortalamalar hesaplanmıştır. Buna göre, gün başlangıç saati UTC 00:00 (yani Türkiye de saat 03:00) alınmıştır. Dolayısıyla sol kısımdaki sorgunun aldığı günlük ortalama aslında Türkiye'de ki 03:00–03:00 arası verinin ortalamasıdır ve buna bir günlük ortalama denilemez. Sağdaki kısımda ise timezone bilgisi kullanılarak konum Türkiye olduğu belirtilmiş. Veri ortalaması UTC 21:00–21:00 Türkiye için 00:00–00:00) aralığında alınmıştır. Doğru hesaplama yöntemi böyledir. Görüldüğü üzere Raw data üzerinde bir değişlik yapılmamış olup, değişen kısmın sadece gün başlangıç saatinin local timezone bilgisine göre ayarlanmasıdır.

Timeshift

Timeshift ise raw datadaki verinin saatini manüpüle edip sorgulama yapmanızı sağlar.

|> timeShift(duration: 3h, columns: [“_start”, “_stop”, “_time”])

denildiğinde “start”, “stop” ve “time” bilgisine +3’er saat eklenmiş olur. Raw datada da +3 saat eklenmiş olarak gösterilir. Bu işlem çok maliyetli bir işlemdir. Bu yüzden fazla veri ile çalışırken kullanılmaması veya tüm diğer sorgulama işlemleri ile veri indirgendikten sonra kullanılması (yani daha az veri ile kullanılmış olacaktır.)

Aşağıdaki SS’te sol kısımda timeshift kullanılan, sağ kısımda ise kullanılmayan sorgular gözükmektedir. Raw datalar incelendiğinde timeshift kullanılmayan verideki ilk time 2021–11–12T09:00:00.000Z iken timeshift kullanılan tarafta 2021–11–12T12:00:00.000Z dir. _value değerlerine bakılarak aynı bilgiler olduğu anlaşılabilir. Takip eden diğer değerlere bakıldığında da sadece saat bilgisine +3 saat eklendiği gözükecektir.

Tüm bunların sadece bir sorgulamadan ibaret olduğu ve ham data üzerinde bir değişiklik yapmadığını bir kez daha vurgulamak isterim.

Timeshift vs Timezone:

Sağda timeshift ile +3 saat eklendi. Tüm raw data Türkiye saatine getirilmiş olundu. Dolayısıyla her günün ortalamasını al denildiğinde local 00:00 aynı zamanda raw datadan da 00:00'ı başlangıç saati seçilmiş oldu. Sonuçlara bakılırsa 2 sorguda aynı value leri getirdi. Ama time, _start ve _stop kolonlarına bakıldığında timeshift olan kısımda tüm bu kolondaki saatlere +3 saat eklendiği gözükmektedir, bu unutulmaması gereken önemli bir husustur.

EK:

Timezone’nun timeshift ile muadil kullanımı aşağıdaki gibidir. Ama timeshift kullanılarak bu işlemin yapılmasının maliyeti çok büyüktür.

--

--