Accéder au contenu principal Passer au contenu complémentaire

Transformer des données récursives hiérarchiques vers un format CSV plat

Mettez à plat une structure JSON hiérarchique relative aux employé·es dans un format CSV, à l'aide des clauses RECURSIVE ON et PARENT du langage Data Shaping Query Language.

Pourquoi et quand exécuter cette tâche

Dans cet exemple, une structure JSON hiérarchique contient des données relatives aux employé·es, organisées en fonction des différentes hiérarchies, avec un·e président·e au niveau supérieur et des équipes imbriquées de managers et d'employé·es. Vous allez aplatir cette structure en un fichier CSV contenant des colonnes pour le nombre, le nom, l'intitulé de poste, l'ID du manager et le salaire de chaque employé·e.

Le JSON d'entrée comprend une organisation hiérarchique avec des éléments team imbriqués, comme suit :

{
  "employees": [
    {
      "id": "E001",
      "name": "Alice Johnson",
      "role": "President",
      "salary": 150000,
      "team": [
        {
          "id": "E002",
          "name": "Bob Smith",
          "role": "VP Engineering",
          "salary": 120000,
          "team": [
            {
              "id": "E003",
              "name": "Carol Williams",
              "role": "Engineering Manager",
              "salary": 95000,
              "team": [
                {
                  "id": "E004",
                  "name": "David Brown",
                  "role": "Senior Developer",
                  "salary": 85000,
                  "team": []
                },
                {
                  "id": "E005",
                  "name": "Emma Davis",
                  "role": "Developer",
                  "salary": 75000,
                  "team": []
                }
              ]
            }
          ]
        },
        {
          "id": "E006",
          "name": "Frank Miller",
          "role": "VP Sales",
          "salary": 115000,
          "team": [
            {
              "id": "E007",
              "name": "Grace Lee",
              "role": "Sales Manager",
              "salary": 85000,
              "team": [
                {
                  "id": "E008",
                  "name": "Henry Chen",
                  "role": "Sales Representative",
                  "salary": 65000,
                  "team": []
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

La sortie comprend une structure CSV plate avec les colonnes suivantes :

EMPNO,ENAME,JOB,MGR,SAL

Procédure

  1. Créez une map DSQL et ajoutez les structures d'entrée et de sortie.
    Un premier mapping entre les éléments racine est automatiquement créé.
  2. Cliquez sur l'élément de sortie row et saisissez l'expression suivante :
    FROM employees RECURSIVE ON team PARENT $p
    La clause FROM employees RECURSIVE ON team effectue une boucle sur tous·tes les employé·es et descend de manière récursive dans les tableaux team imbriqués à chaque niveau de la hiérarchie. La clause PARENT $p attribue l'objet parent à la variable $p. Pour l'élément racine president, $p est vide. Pour les autres employé·es, $p contient les données de leur manager direct·e.
  3. Mappez les champs d'entrée aux éléments de sortie comme suit :
    1. id vers EMPNO
    2. name vers ENAME
    3. role vers JOB
    4. salary vers SAL
  4. Cliquez sur l'élément de sortie MGR et saisissez la clause suivante :
    IF (hasValue($p)) $p.id
    La clause vérifie que la variable $p a une valeur avant d'attribuer l'ID parent. Si elle est vide, elle attribue une chaîne de caractères vide. Sinon, elle attribue l'ID parent.
  5. Exécutez la map DSQL à l'aide de la fonctionnalité Test Run (Exécution de test).

Résultats

La structure JSON hiérarchique est aplatie en enregistrements individuels des employé·es, avec les relations managériales préservées comme suit :
EMPNO,ENAME,JOB,MGR,SAL
E001,Alice Johnson,President,,150000
E002,Bob Smith,VP Engineering,E001,120000
E003,Carol Williams,Engineering Manager,E002,95000
E004,David Brown,Senior Developer,E003,85000
E005,Emma Davis,Developer,E003,75000
E006,Frank Miller,VP Sales,E001,115000
E007,Grace Lee,Sales Manager,E006,85000
E008,Henry Chen,Sales Representative,E007,65000

Cette page vous a-t-elle aidé ?

Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – faites-le-nous savoir.