Ich verwende einen Cron-Job, um den automatischen Archivierungsprozess für Matomo auszuführen. Es funktioniert großartig. Ich analysiere einige der Daten und habe festgestellt, dass ich beim Filtern der Daten in einer numerischen Archivtabelle für Zeitraum 3 (dh die Gesamtzahl der Besuche für einen bestimmten Monat) drei Datensätze für jede Site zurückerhalte. Ich hatte jedoch nur erwartet, eine für jede Site zu sehen, z. Die Gesamtzahl der Besuche auf einer Website für einen einzelnen Monat. Von diesen drei Datensätzen, die für eine einzelne Site zurückgegeben werden, scheint der älteste Datensatz in der Abfrage die Summe der beiden späteren Datensätze zu sein, und der älteste Datensatz ist die Gesamtzahl der Besuche auf der Site für einen bestimmten Monat.
Hier ist ein Beispiel für die Abfrage:
select * from piwik.piwik_archive_numeric_2019_10 as q
where q.name = 'nb_visits' and q.idsite = 1 and q.period = 3;
Weiß jemand, warum für den Monatszeitraum (z. B. Zeitraum 3) drei Datensätze aus einer piwik_archive_numeric_<date>
- Tabelle zurückgegeben werden?.
die Antwort auf den Joshmcode ist korrekt. In Matomo gibt es mehrere Archive. Es kann mehrere Archive für denselben Zeitraum und dieselbe Site geben, z. B. wenn Sie mehrere Segmente haben oder wenn mehrere Archive zu unterschiedlichen Tageszeiten verarbeitet wurden und die "veralteten" Archive möglicherweise noch nicht gelöscht wurden. Sie können im Feld idarchive
nachsehen, zu welchen Archiven es gehört.
OP-Hinweis: Ich bin zu 85% sicher, dass dies korrekt ist. Wenn jemand eine bessere Erklärung hat, posten Sie diese bitte.
Die Lösung befindet sich im Wert done
in der Spalte name
der Archivtabelle. Grundsätzlich ist überall dort, wo es einen Datensatz gibt, in dem die Namensspalte = done
ist, das entsprechende idarchive
der zugehörige korrekte Schlüssel für andere Aufzeichnungen. Wenn eine Zeile beispielsweise done
in der Namensspalte enthält und idarchive
1234
Ist, ist der richtige sum_visit_length
Datensatz für eine bestimmte Site derjenige Dabei ist idarchive
1234
, auch wenn für diese Site möglicherweise andere Werte vorhanden sind.
So habe ich das in einem praktischeren Sinne verwendet:
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');
Das obige Skript findet alle idarchive
-Werte, wobei die Spalte name
gleich done
ist, und dann nimmt die äußere Abfrage nur Werte von nb_users
An, wobei das entsprechende idarchive
value befindet sich in der Unterabfrage.