web-dev-qa-db-fra.com

Archives Piwik / Matomo: Pourquoi y a-t-il trois enregistrements pour la période du mois?

J'utilise un travail cron pour exécuter le processus d'archivage automatique pour Matomo. Cela fonctionne très bien. J'analyse certaines des données et j'ai remarqué que lorsque je filtre les données dans un tableau d'archives numériques pour la période 3 (qui est le nombre total de visites pour un mois donné), je récupère trois enregistrements pour chaque site. Cependant, je ne m'attendais à en voir qu'un pour chaque site, par exemple le nombre total de visites sur un site pendant un seul mois. De ces trois enregistrements revenant pour un seul site, il semble que l'enregistrement le plus ancien dans la requête soit la somme des deux derniers enregistrements et que l'enregistrement le plus ancien soit le nombre total de visites sur le site pour un mois donné.

Voici un exemple de requête:

select * from piwik.piwik_archive_numeric_2019_10 as q
where q.name = 'nb_visits' and q.idsite = 1 and q.period = 3;

Quelqu'un sait-il pourquoi trois enregistrements sont renvoyés d'un piwik_archive_numeric_<date> tableau pour la période du mois (par exemple période 3).

1
joshmcode

la réponse joshmcode est correcte, il y a plusieurs archives dans Matomo. il peut y avoir plusieurs archives pour la même période et le même site, par exemple si vous avez plusieurs segments, ou si plusieurs archives ont été traitées à différents moments de la journée, et celles "périmées" peuvent ne pas encore être supprimées. Vous pouvez regarder le champ idarchive pour voir à quelles archives il appartient.

1
mattab

Remarque OP: je suis sûr à 85% que c'est correct. Si quelqu'un d'autre a une meilleure explication, veuillez poster.

La solution se trouve dans la valeur done dans la colonne name de la table d'archive. Fondamentalement, partout où il y a un enregistrement où la colonne nom = done, le idarchive correspondant est la clé correcte associée pour d'autres enregistrements. Par exemple, si une ligne contient done dans la colonne de nom et que idarchive est 1234, puis le bon sum_visit_length l'enregistrement pour un site donné est celui où idarchive est 1234, même si d'autres valeurs peuvent exister pour ce site.

Voici comment je l'ai utilisé dans un sens plus pratique:

select * from piwik.piwik_archive_numeric_2019_10 as q
where q.period = 3 and q.name = 'nb_users' and q.idarchive in
                                                (select q.idarchive from 
                                                 piwik.piwik_archive_numeric_2019_10 
                                                 as q where q.name = 'done');

Le script ci-dessus trouve toutes les valeurs idarchive où la colonne name est égale à done, puis la requête externe ne prend que les valeurs de nb_users où la valeur idarchive correspondante est dans la sous-requête.

0
joshmcode