windows_1d
windows_1d, Window Servisi tarafından üretilen takvim günü (1D) pencere istatistiklerini saklar. Her satır bir cihaz-değişken çiftinin tek bir takvim gününe ait finalize edilmiş veya devam eden pencere sonucunu temsil eder.
Bu tablo üç pencere tablosunun en yüksek büyüme hızına sahip olanıdır. Günlük kayıt üretildiği için windows_1w ve windows_1m tablolarına kıyasla ~7x ve ~30x daha hızlı büyür. 1W ve 1M pencereleri bu tablodaki kayıtlar rollup edilerek türetilir; bu nedenle windows_1d Window Servisinin birincil yazma hedefidir.
window_type kolonu yoktur; tablo adından örtük olarak 1D olarak bilinir.
FK Davranış Notları
| FK | ON DELETE | ON UPDATE | Not |
|---|---|---|---|
windows_1d.device_id -> devices.id | CASCADE | CASCADE | Cihaz silinirse tüm günlük pencere istatistikleri de silinir. |
Kolonlar
| Kolon | Tip | Null | Açıklama |
|---|---|---|---|
id | bigint | hayır | Otomatik artan birincil anahtar |
device_id | varchar(21) | hayır | Cihaz kimliği |
variable_id | varchar(30) | hayır | Değişken kimliği (örn. vrms_a, ae_tot) |
window_start | timestamptz | hayır | Takvim günü başlangıcı (00:00:00 UTC+TZ) |
window_end | timestamptz | hayır | Takvim günü sonu (sonraki günün 00:00:00) |
anchor_time | timestamptz | evet | Grid hizalama referans zamanı |
finalized | boolean | hayır | true ise pencere kapanmış, artık sadece Replay Worker güncelleyebilir |
calc_version | integer | hayır | Hesaplama algoritması versiyonu (varsayılan: 1) |
sample_count | integer | hayır | Pencereye giren geçerli örnek sayısı |
expected_sample_count | integer | hayır | Teorik beklenen örnek sayısı |
completeness_ratio | double precision | hayır | sample_count / expected_sample_count |
quality_flags | jsonb | hayır | Gap/reset/rollover/outlier işaretleri |
sum | double precision | evet | Σ x_i |
sum_sq | double precision | evet | Σ x_i² |
min | double precision | evet | Pencere içi minimum |
max | double precision | evet | Pencere içi maksimum |
mean | double precision | evet | sum / sample_count |
stddev | double precision | evet | Standart sapma |
p10 | double precision | evet | 10. yüzdelik dilim |
p50 | double precision | evet | 50. yüzdelik dilim (medyan) |
p90 | double precision | evet | 90. yüzdelik dilim |
sum_t | double precision | evet | Σ t_i — trend için zaman indeks toplamı |
sum_v | double precision | evet | Σ v_i — trend için değer toplamı |
sum_tv | double precision | evet | Σ (t_i × v_i) |
sum_t2 | double precision | evet | Σ t_i² |
slope | double precision | evet | Lineer trend eğimi |
r2 | double precision | evet | Trend uyum katsayısı |
first_value | double precision | evet | Pencere başındaki sayaç değeri (yalnız sayaç değişkenlerde) |
last_value | double precision | evet | Pencere sonundaki sayaç değeri (yalnız sayaç değişkenlerde) |
delta_value | double precision | evet | last_value - first_value, reset/rollover düzeltmeli |
counter_reset_count | integer | evet | Sayaç reset sayısı (yalnız sayaç değişkenlerde) |
counter_rollover_count | integer | evet | Sayaç taşma sayısı (yalnız sayaç değişkenlerde) |
created_at | timestamptz | hayır | Kayıt oluşturulma zamanı |
updated_at | timestamptz | hayır | Son güncelleme zamanı |
first_value, last_value, delta_value, counter_reset_count, counter_rollover_count yalnız variable_type = counter olan değişkenler için anlam taşır. Ölçüm değişkenlerinde bu alanlar NULL kalır.
İndeksler
| İndeks | Tür | Amacı |
|---|---|---|
UNIQUE(device_id, variable_id, window_start) | Unique | Idempotent upsert anahtarı |
(device_id, variable_id, window_end DESC) | B-tree | Son pencereyi hızlı bulmak |
(device_id, window_start DESC) | B-tree | Cihaz bazlı zaman sıralı okuma |
Örnek Kayıtlar
- Ölçüm Değişkeni (vrms_a)
- Sayaç Değişkeni (ae_tot)
{
"id": 10001,
"device_id": "400000011D081B70",
"variable_id": "vrms_a",
"window_start": "2026-04-12T00:00:00Z",
"window_end": "2026-04-13T00:00:00Z",
"anchor_time": "2026-04-12T00:00:00Z",
"finalized": true,
"calc_version": 1,
"sample_count": 96,
"expected_sample_count": 96,
"completeness_ratio": 1.0,
"quality_flags": {},
"sum": 21964.8,
"sum_sq": 5025432.96,
"min": 221.4,
"max": 232.1,
"mean": 228.8,
"stddev": 2.31,
"p10": 225.5,
"p50": 228.9,
"p90": 231.6,
"slope": 0.0004,
"r2": 0.12,
"first_value": null,
"last_value": null,
"delta_value": null,
"counter_reset_count": null,
"counter_rollover_count": null,
"created_at": "2026-04-13T00:05:12Z",
"updated_at": "2026-04-13T00:05:12Z"
}
{
"id": 10002,
"device_id": "400000011D081B70",
"variable_id": "ae_tot",
"window_start": "2026-04-12T00:00:00Z",
"window_end": "2026-04-13T00:00:00Z",
"anchor_time": "2026-04-12T00:00:00Z",
"finalized": true,
"calc_version": 1,
"sample_count": 96,
"expected_sample_count": 96,
"completeness_ratio": 1.0,
"quality_flags": {},
"sum": null,
"sum_sq": null,
"min": null,
"max": null,
"mean": null,
"stddev": null,
"p10": null,
"p50": null,
"p90": null,
"slope": null,
"r2": null,
"first_value": 184320000,
"last_value": 184695400,
"delta_value": 375400,
"counter_reset_count": 0,
"counter_rollover_count": 0,
"created_at": "2026-04-13T00:05:14Z",
"updated_at": "2026-04-13T00:05:14Z"
}