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).
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.
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.