CodeGym /Kurslar /SQL SELF /Analitik məlumatların ayrıca cədvəllərdə loglanması

Analitik məlumatların ayrıca cədvəllərdə loglanması

SQL SELF
Səviyyə , Dərs
Mövcuddur

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, burada 2023-10-01 olacaq.
  • 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_DATE kimi 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! NULLIF istifadə 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!

2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
Analitik məlumatların loglanması üçün cədvəlin yaradılması
Analitik məlumatların loglanması üçün cədvəlin yaradılması
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION