Cronジョブを使用して、Matomoの自動アーカイブプロセスを実行します。それは素晴らしい働きをします。一部のデータを分析していますが、期間3(特定の月の訪問の総数)の数値アーカイブテーブルのデータをフィルター処理すると、サイトごとに3つのレコードが返されることに気付きました。ただし、サイトごとに1つだけ表示されることを期待していました。 1か月間のサイトへの訪問の総数。 1つのサイトについて返される3つのレコードのうち、クエリで最も古いレコードは、後の2つのレコードの合計であり、最も古いレコードは、特定の月のサイトへの合計訪問数です。
クエリの例を次に示します。
select * from piwik.piwik_archive_numeric_2019_10 as q
where q.name = 'nb_visits' and q.idsite = 1 and q.period = 3;
1か月の期間(例:期間3)でpiwik_archive_numeric_<date>
テーブルから3つのレコードが返される理由を誰かが知っていますか?.
joshmcodeの答えは正しいです。Matomoには複数のアーカイブがあります。たとえば、複数のセグメントがある場合、または複数のアーカイブが1日の異なる時間に処理され、「古い」アーカイブがまだ削除されていない場合など、同じ期間およびサイトに複数のアーカイブが存在する可能性があります。 idarchive
フィールドを見て、それが属するアーカイブを確認できます。
OPノート:これが正しいと85%確信しています。他に誰かより良い説明がある場合は、投稿してください。
解決策は、アーカイブテーブルのdone
列内のname
値にあります。基本的に、name column = done
というレコードがある場合は、対応するidarchive
が関連付けられたcorrectキーです他のレコード用。たとえば、行の名前列にdone
があり、idarchive
が1234
である場合、特定のサイトの正しいsum_visit_length
レコードは、idarchive
は、そのサイトに他の値が存在する場合でも、1234
です。
これは、これをより実用的な意味で使用した方法です。
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');
上記のスクリプトは、idarchive
列がname
と等しいすべてのdone
値を検索し、外部クエリはnb_users
からのみ値を取得します。ここで、対応するidarchive
値はサブクエリにあります。