Təsəvvür elə, həftəlik satışlar üzrə hesabat hazırlayırsan. Hesablamalar hazırdır, müştərilər razıdır. Amma bir aydan sonra səndən soruşurlar: "O hesabatda nə var idi, göstərə bilərsən?" Əgər əvvəlcədən məlumatları saxlamamısansa, ya onları əl ilə bərpa etməli olacaqsan, ya da "bacarmıram" deməli olacaqsan. Bu, təkcə narahat deyil, həm də reputasiyana təsir edə bilər.
Analitik məlumatların loglanması bir neçə vacib məsələni həll edir:
- Tarixin saxlanması: əsas metrikləri (məsələn, gəlir, sifariş sayı) müəyyən dövrlər üzrə qeyd edirsən.
- Audit və diaqnostika: nəsə düz getməsə, həmişə hansı məlumatların qeyd olunduğunu yoxlaya bilərsən.
- Məlumatların müqayisəsi: zaman möhürləri əlavə edərək göstəricilərin dəyişməsini analiz edə bilərsən.
- Məlumatların təkrar istifadəsi: saxlanmış metrikləri başqa analitik tapşırıqlarda istifadə etmək olur.
Əsas ideya: log_analytics cədvəli
Analitik məlumatların loglanması üçün bütün əsas göstəriciləri saxlayan xüsusi bir cədvəl yaradırıq. Hər yeni nəticə — cədvəldə yeni bir sətrdir. Necə işlədiyini daha yaxşı başa düşmək üçün əsas ssenaridən başlayaq.
Cədvəlin strukturu nümunəsi
log_analytics cədvəlində hesabatlar barədə məlumat saxlayacağıq. Struktur belədir (DDL — Data Definition Language):
CREATE TABLE log_analytics (
log_id SERIAL PRIMARY KEY, -- Qeyd üçün unikal identifikator
report_name TEXT NOT NULL, -- Hesabatın və ya metrikanın adı
report_date DATE DEFAULT CURRENT_DATE, -- Hesabata aid olan tarix
category TEXT, -- Məlumatın kateqoriyası (məsələn, region, məhsul)
metric_value NUMERIC NOT NULL, -- Metrikanın dəyəri
created_at TIMESTAMP DEFAULT NOW() -- Loglama tarixi və vaxtı
);
log_id: qeyd üçün əsas identifikator.report_name: hesabatın və ya metrikanın adı, məsələn, "Weekly Sales".report_date: metrikaya aid olan tarix. Məsələn, bu 1 oktyabr satışlarıdırsa, burada2023-10-01olacaq.category: məlumatları qruplaşdırmağa kömək edir, məsələn, regionlara görə.metric_value: hesabat metrikası üçün ədədi dəyər.created_at: loglama üçün zaman möhürü.
log_analytics-ə məlumat yazmaq nümunəsi
Tutaq ki, "Şimal" regionu üzrə oktyabr gəlirini hesabladıq. Bu dəyəri necə saxlamaq olar?
INSERT INTO log_analytics (report_name, report_date, category, metric_value)
VALUES ('Monthly Revenue', '2023-10-01', 'North', 15000.75);
Nəticə:
| log_id | report_name | report_date | category | metric_value | created_at |
|---|---|---|---|---|---|
| 1 | Monthly Revenue | 2023-10-01 | North | 15000.75 | 2023-10-10 14:35:50 |
Loglama üçün prosedur yaratmaq
Təbii ki, hər həftə və ya ay məlumatları əl ilə yazmaq olmur. Ona görə prosesi prosedur ilə avtomatlaşdıraq.
Gəlin, gəlir məlumatlarını loglamaq üçün sadə bir prosedur yaradaq:
CREATE OR REPLACE FUNCTION log_monthly_revenue(category TEXT, revenue NUMERIC)
RETURNS VOID AS $$
BEGIN
INSERT INTO log_analytics (report_name, report_date, category, metric_value)
VALUES ('Monthly Revenue', CURRENT_DATE, category, revenue);
END;
$$ LANGUAGE plpgsql;
İndi log_monthly_revenue proseduru iki parametr qəbul edir:
category: məlumatın kateqoriyası, məsələn, region.revenue: gəlirin dəyəri
Bu funksiyanı gəliri yazmaq üçün belə çağırmaq olar:
SELECT log_monthly_revenue('North', 15000.75);
Nəticə INSERT ilə yazılandakı kimi olacaq.
Log strukturu üçün əlavə ideyalar
Bəzən əsas metrika bir yox, bir neçə ola bilər. Gəlin, əlavə göstəriciləri, məsələn, sifariş sayı və orta çek-i necə saxlamaq olar, baxaq.
Cədvəlin strukturunu yeniləyək:
CREATE TABLE log_analytics_extended (
log_id SERIAL PRIMARY KEY,
report_name TEXT NOT NULL,
report_date DATE DEFAULT CURRENT_DATE,
category TEXT,
metric_values JSONB NOT NULL, -- Metrikaların JSONB formatında saxlanması
created_at TIMESTAMP DEFAULT NOW()
);
Burada əsas yenilik — bir neçə metrikani bir sahədə saxlamaq üçün JSONB tipindən istifadədir.
Genişlənmiş cədvələ yazmaq nümunəsi
Tutaq ki, eyni anda üç metrika saxlamaq lazımdır: gəlir, sifariş sayı və orta çek. Sorğu nümunəsi belədir:
INSERT INTO log_analytics_extended (report_name, category, metric_values)
VALUES (
'Monthly Revenue',
'North',
'{"gəlir": 15000.75, "sifarişlər": 45, "orta_çek": 333.35}'::jsonb
);
Nəticə:
| log_id | report_name | category | metric_values | created_at |
|---|---|---|---|---|
| 1 | Monthly Revenue | North | {"gəlir": 15000.75, "sifarişlər": 45, "orta_çek": 333.35} | 2023-10-10 14:35:50 |
Loglardan istifadə nümunələri: gəlirlərin analizi
Tutaq ki, oktyabr ayı üzrə bütün regionlar üzrə ümumi gəliri bilmək istəyirik. Sorğu belədir:
SELECT SUM((metric_values->>'gəlir')::NUMERIC) AS total_revenue
FROM log_analytics_extended
WHERE report_date BETWEEN '2023-10-01' AND '2023-10-31';
Loglardan istifadə nümunələri: regionlar üzrə trend
Regionlar üzrə gəlirin dəyişməsini analiz edirik:
SELECT category, report_date, (metric_values->>'gəlir')::NUMERIC AS revenue
FROM log_analytics_extended
ORDER BY category, report_date;
Tipik səhvlərin işlənməsi
Analitik məlumatların loglanmasında bir neçə səhv etmək olar. Gəlin, onları və qarşısını alma yollarını müzakirə edək.
- Səhv: kateqoriya və ya tarixi göstərməyi unutmaq. Cədvəldə
DEFAULT CURRENT_DATEkimi default dəyərlər təyin etmək tövsiyə olunur. - Səhv: qeyd təkrarı. Təkrarı önləmək üçün unikal indeks əlavə etmək olar:
CREATE UNIQUE INDEX unique_log_entry ON log_analytics (report_name, report_date, category); - Səhv: sıfıra bölmə ilə metrik hesablanması. Həmişə böləni yoxla!
NULLIFistifadə et:SELECT revenue / NULLIF(order_count, 0) AS avg_check FROM orders;
Real layihələrdə tətbiq
Analitik məlumatların loglanması müxtəlif sahələrdə faydalıdır:
- Retail: məhsul kateqoriyaları üzrə gəlir və satışların izlənməsi.
- Servislər: server və ya tətbiqlərin yüklənməsinin analizi.
- Maliyyə: tranzaksiyaların və xərclərin nəzarəti.
Bu məlumatlar sənə təkcə nə baş verdiyini izah etməyə yox, həm də loglarda gördüklərinə əsaslanaraq qərar verməyə kömək edəcək. İndi PostgreSQL-də analitik məlumatların tarixçəsini necə qeyd etməyi bilirsən. Əla, qarşıda daha çox faydalı biliklər var!
GO TO FULL VERSION