Objektivi im është të numëroj në mënyrë efikase numrin e hyrjeve për secilin përdorues përgjatë kombinimeve të datave. Vlen të theksohet se:
- Marzhi i gabimit pranohet (le të themi deri në 3% për hir të shembullit).
- Numri nuk është i dallueshëm (nëse një përdorues është identifikuar më shumë se një herë, unë dua të di numrin e herëve)
Unë kam krijuar një shembull të thjeshtuar për të ilustruar më mirë mendimin tim.
Le të themi se kemi një tabelë të madhe sesionesh që përmban vetëm një user_id
dhe një timestamp
që duket si:
CREATE TABLE sessions (
user_id text,
tstamp timestamp
)
Tani le të themi se ne duam të numërojmë numrin e seancave që ka pasur çdo përdorues (nëse një user_id
është i pranishëm në një kohë, ne e dimë që do të thotë një hyrje) si në shkallëzimin e një dite ashtu edhe në muajin. Kjo mund të ilustrohet me këtë pyetje (të cilën unë dua ta optimizoj):
SELECT user_id,
date_trunc('day', tstamp)::date AS cohort_day,
date_trunc('month', tstamp)::date AS cohort_month,
count(*) AS number_of_sessions
FROM sessions
GROUP BY 1,2,3;
Tabela e rezultateve duhet të duket diçka si kjo:
user_id cohort_date cohort_month number_of_sessions
123456789 2020-06-25 2020-06-01 3
622428294 2020-06-22 2020-06-01 2
222678293 2020-06-23 2020-06-01 9
422288297 2020-06-24 2020-06-01 1
Së fundmi, kjo tabelë është pjesë e ETL (Postgres) dhe tabelat hidhen dhe rindërtohen në çdo ekzekutim.