etalab / transport-site

Rendre disponible, valoriser et améliorer les données transports
https://transport.data.gouv.fr
184 stars 28 forks source link

resource_monthly_metrics : ajouter dataset_datagouv_id #3931

Closed AntoineAugusti closed 1 month ago

AntoineAugusti commented 1 month ago

L'identifiant data.gouv.fr du dataset est à présent (ou alors c'était toujours) renvoyé par l'API data.gouv.fr. On ne dispose pas de cette information en base de données et c'est toujours utile à obtenir et pour joindre avec d'autres tables.

PR initiale d'ajout https://github.com/etalab/transport-site/pull/3725

cc @thbar avec qui on en a discuté

AntoineAugusti commented 1 month ago

cc @ptitfred serais-tu intéressé par ce ticket ?

ptitfred commented 1 month ago

D'après le typed schema, la colonne metric_name n'attend qu'une valeur:

    field(:metric_name, Ecto.Enum, values: [:downloads])

Mais le job d'import peut en créer une autre:

  defp metrics_for_model(:dataset, %{
         "monthly_visit" => monthly_visit,
         "monthly_download_resource" => monthly_download_resource
       }) do
    [{:views, monthly_visit}, {:downloads, monthly_download_resource}]
  end
ptitfred commented 1 month ago

L'API renvoie ceci :

{
  "data": [
    {
      "__id": 41455497,
      "dataset_id": "5d31d8b69ce2e703da90b699",
      "metric_month": "2024-05",
      "monthly_download_resource": 9992,
      "resource_id": "e0dbd217-15cd-4e28-9459-211a27511a34"
    }
  ],
  "links": {},
  "meta": {}
}

Pour confirmer, il s'agit bien de stocker le champ dataset_id ?

AntoineAugusti commented 1 month ago

Transport.Jobs.ImportMonthlyMetrics (dans import_dataset_monthly_metrics_job.ex, peut-être à déplacer dans un fichier car utilisé aussi par ce même fichier ET import_resource_monthly_metrics_job.ex) permet d'importer des metrics au scope dataset et resource, il y a des fonctions communes. metrics_for_model prend l'argument :dataset ou :resource en fonction du type d'objet, avec une différence dans les metrics (downloads ou downloads+views`).

https://github.com/etalab/transport-site/blob/23f6e7ad8f50a7f5b769eb214e779be22a7a01a5/apps/transport/lib/jobs/import_dataset_monthly_metrics_job.ex#L109-L118

Le champ que l'on souhaite est bien dataset_id dans l'API data.gouv.fr et correspond à dataset.datagouv_id chez nous (pour ne pas faire de confusion avec dataset.id)

AntoineAugusti commented 1 month ago

Quelques problèmes lors de l'exécution en production, des incohérences entre resource_id et datagouv_id entre notre base de données et les retours de l'API, voir Mattermost

ptitfred commented 1 month ago
ptitfred commented 1 month ago

Après avoir tronqué la table et relancé le job manuellement :

=> select rmm.dataset_datagouv_id is null, count(1) from resource_monthly_metrics rmm where rmm.resource_datagouv_id in (select r.datagouv_id from resource r join dataset d on d.id = r.dataset_id and d.is_active where not r.is_community_resource) group by 1
;
 ?column? | count 
----------+-------
 f        | 19783
 t        |     4
(2 rows)
ptitfred commented 1 month ago

Les 4 entrées concernées:

=> select rmm.* from resource_monthly_metrics rmm where rmm.resource_datagouv_id in (select r.datagouv_id from resource r join dataset d on d.id = r.dataset_id and d.is_active where not r.is_community_resource) and rmm.dataset_datagouv_id is null;
   id   |         resource_datagouv_id         | year_month | metric_name | count |        inserted_at         |         updated_at         | dataset_datagouv_id 
--------+--------------------------------------+------------+-------------+-------+----------------------------+----------------------------+---------------------
 518906 | 919b4ca6-11e3-4156-bf59-5c0e7f25d929 | 2023-08    | downloads   |     5 | 2024-05-20 09:56:38.321059 | 2024-05-20 09:56:38.321059 | 
 518900 | 919b4ca6-11e3-4156-bf59-5c0e7f25d929 | 2024-01    | downloads   |    37 | 2024-05-20 09:56:38.313569 | 2024-05-20 09:56:38.314674 | 
 519834 | 45f2e7ad-2199-4e01-8626-8656a6f199ef | 2023-08    | downloads   |     7 | 2024-05-20 09:56:51.899753 | 2024-05-20 09:56:51.899753 | 
 523720 | 0b65dda9-51d3-4d84-811b-8a11629a5e55 | 2023-08    | downloads   |    15 | 2024-05-20 09:57:52.516521 | 2024-05-20 09:57:52.516521 | 
(4 rows)
ptitfred commented 1 month ago

Si les 4 cas manquants s'avéraient un jour problématiques, je propose d'ouvrir une nouvelle issue à ce moment-là.