メイン コンテンツをスキップする 補完的コンテンツへスキップ

階層的な再帰データをフラットなCSV形式に変換する

Data Shaping Query LanguageのRECURSIVE ON句とPARENT句を使用して、従業員の階層的なJSON構造をCSV形式にフラット化します。

このタスクについて

この例では、社長を最上位として、管理者や従業員のネストされたチームを持つ、レポート構造によって編成された従業員データを含む階層的なJSON構造があります。この構造を、従業員番号、従業員名、役職、マネージャーID、給与のカラムを含むCSVファイルにフラット化します。

入力JSONは、次のようにネストされたteam要素を含む組織階層に従います。

{
  "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": []
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

出力は、次のカラムを持つフラットなCSV構造になります。

EMPNO,ENAME,JOB,MGR,SAL

手順

  1. 新しいDSQLマップを作成して入力ストラクチャーと出力ストラクチャーを追加します。
    ルートエレメント間に最初のマッピングが自動的に作成されます。
  2. 出力のループ要素をクリックし、次の式を入力します。
    FROM employees RECURSIVE ON team PARENT $p
    FROM employees RECURSIVE ON team句は、すべての従業員を反復処理し、階層のあらゆるレベルでネストされたteam配列を再帰的に下降します。PARENT $p句は、親オブジェクトを変数$pに割り当てます。ルート要素presidentの場合、$pは空です。その他のすべての従業員の場合、$pには直属の上司のデータが含まれます。
  3. 次のように入力フィールドを出力要素にマップします。
    1. idEMPNO
    2. nameENAME
    3. roleJOB
    4. salarySAL
  4. 出力MGR要素をクリックし、次の句を入力します。
    IF (hasValue($p)) $p.id
    この句は、親IDを割り当てる前に、変数$pに値があるかどうかを確認します。空の場合は、空の文字列が割り当てられます。それ以外の場合は、親IDを割り当てます。
  5. [テスト実行] 機能を使用してDSQLマップを実行します。

タスクの結果

階層的なJSON構造は、マネージャーの関係が次のように保持された状態で個々の従業員レコードにフラット化されます。
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

このページは役に立ちましたか?

このページまたはコンテンツにタイポ、ステップの省略、技術的エラーなどの問題が見つかった場合はお知らせください。