web-dev-qa-db-ja.com

Piwik / Matomoアーカイブ:その月の期間に3つのレコードがあるのはなぜですか?

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つのレコードが返される理由を誰かが知っていますか?.

1
joshmcode

joshmcodeの答えは正しいです。Matomoには複数のアーカイブがあります。たとえば、複数のセグメントがある場合、または複数のアーカイブが1日の異なる時間に処理され、「古い」アーカイブがまだ削除されていない場合など、同じ期間およびサイトに複数のアーカイブが存在する可能性があります。 idarchiveフィールドを見て、それが属するアーカイブを確認できます。

1
mattab

OPノート:これが正しいと85%確信しています。他に誰かより良い説明がある場合は、投稿してください。

解決策は、アーカイブテーブルのdone列内のname値にあります。基本的に、name column = doneというレコードがある場合は、対応するidarchiveが関連付けられたcorrectキーです他のレコード用。たとえば、行の名前列にdoneがあり、idarchive1234である場合、特定のサイトの正しい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値はサブクエリにあります。

0
joshmcode