Skip to content

Améliorer la détection de la première partition dans Extraction2 #148

Description

@Esysteme

Contexte

La requête suivante est exécutée dans App/Library/Extraction2.php, via Extraction2::getLastPartition() :

SELECT FROM_DAYS(CAST(SUBSTRING(MIN(PARTITION_NAME), 2) AS UNSIGNED) - 1) AS partition_date
FROM information_schema.partitions
WHERE TABLE_NAME = 'ts_value_general_int' AND table_schema=database();

Chemin d'appel identifié :

Extraction2::display()
  -> Extraction2::extract()
    -> Extraction2::getIdVariable()
      -> Extraction2::getPartition()
        -> Extraction2::getLastPartition()

Problème

La requête fait MIN(PARTITION_NAME) avant d'extraire/caster la partie numérique. Le MIN est donc lexicographique sur le nom de partition complet, ce qui dépend du format exact des noms de partition.

Cela peut devenir fragile si :

  • les noms ne sont pas strictement normalisés ;
  • une partition non numérique comme pmax est présente ;
  • le tri alphabétique ne correspond pas au tri numérique attendu.

Proposition

À minima, comparer la partie numérique castée plutôt que le nom brut :

SELECT FROM_DAYS(MIN(CAST(SUBSTRING(PARTITION_NAME, 2) AS UNSIGNED)) - 1) AS partition_date
FROM information_schema.partitions
WHERE TABLE_NAME = 'ts_value_general_int'
  AND table_schema = DATABASE()
  AND PARTITION_NAME IS NOT NULL
  AND PARTITION_NAME REGEXP '^p[0-9]+$';

Si les tables sont partitionnées en RANGE (TO_DAYS(...)), une version encore plus robuste serait d'utiliser PARTITION_DESCRIPTION, qui représente la borne réelle de partition :

SELECT FROM_DAYS(MIN(CAST(PARTITION_DESCRIPTION AS UNSIGNED)) - 1) AS partition_date
FROM information_schema.partitions
WHERE TABLE_NAME = 'ts_value_general_int'
  AND table_schema = DATABASE()
  AND PARTITION_NAME IS NOT NULL
  AND PARTITION_DESCRIPTION <> 'MAXVALUE';

À vérifier

  • Confirmer que ts_value_general_int utilise bien des partitions de type p<TO_DAYS(date)+1>.
  • Ajouter un test de non-régression avec au moins p739000, p739001 et pmax.
  • Vérifier si d'autres chemins utilisent la même convention de calcul de partition dans Extraction2.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions