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

エレメントのグルーピング

Availability-noteBeta
Data Shaping Query LanguageGROUP BY句とGROUP AS句を使い、フラットファイルから階層を作成します。

始める前に

  • 入力と出力のストラクチャーが作成済みであること。ストラクチャーの作成には下のJSONサンプルを使用できます。

このタスクについて

この例では、フラットなJSONファイルから店舗に関するデータを抽出して階層ストラクチャーに書き込むDSQLマップを作成します。

以下のサンプルJSONでは、items配列の各オブジェクトに、項目に関するデータ(店舗や部署など)が含まれています。出力では、項目ごとのレコードではなく、まず店舗ごとのレコード、次に各店舗の部署ごとのレコード、最後に各部署でのオブジェクトごとのレコードを持つようにしたいと考えています。

入力データは次のようになります。
{
    "items": [
        {
            "store_name": "plusstore",
            "store_location": "saint louis",
            "department_name": "sports",
            "salesperson_id": "25",
            "item_name": "MBIKE"
        },
        {
            "store_name": "plusstore",
            "store_location": "saint louis",
            "department_name": "sports",
            "salesperson_id": "25",
            "item_name": "ESCOOT"
        },
        {
            "store_name": "plusstore",
            "store_location": "saint louis",
            "department_name": "electronics",
            "salesperson_id": "32",
            "item_name": "Portable SSD T5"
        },
        {
            "store_name": "plusstore",
            "store_location": "saint louis",
            "department_name": "electronics",
            "salesperson_id": "32",
            "item_name": "Extreme Portable SSD"
        },
        {
            "store_name": "goodstore",
            "store_location": "nashville",
            "department_name": "electronics",
            "salesperson_id": "47",
            "item_name": "Toshiba P300"
        },
        {
            "store_name": "goodstore",
            "store_location": "nashville",
            "department_name": "fresh",
            "salesperson_id": "47",
            "item_name": "Italian tomatoes"
        }
    ]
}
出力ストラクチャーは次のようになります。
{
    "stores": [
        {
            "name": "",
            "location": "",
            "departments": [
                {
                    "name": "",
                    "salesperson_id": "",
                    "items": [
                        {
                            "name": ""
                        }
                    ]
                }
            ]
        }
    ]
}

手順

  1. 新しいDSQLマップを作成して入力ストラクチャーと出力ストラクチャーを追加します。
    ルートエレメント間に最初のマッピングが自動的に作成されます。出力ストラクチャーのルートエレメントに、対応するData Shaping Query Languageの式が表示されます。
  2. stores出力エレメントをクリックして次の式を入力します。
    FROM items
    GROUP BY store_name
    GROUP AS gstore
    GROUP BY句は、それぞれ一意であるstore_name値に対し、出力によってstoresの出現が1回のみ生成されるようにします。GROUP AS句は、現在のグループに名前を割り当てるために使用されます。この名前は後で他の式で使用することもできます。詳細は、TalendData Shaping Languageリファレンスガイドをご覧ください。
  3. storesの下にあるname出力エレメントにstore_nameをドラッグ&ドロップします。
  4. location出力エレメントをクリックして次の式を入力します。
    gstore[0].store_location

    同じグループに値が異なるstore_locationが複数存在する可能性もあるため、この場合はstore_locationを単純に式として使用することはできません。グループピングはstore_nameで行われるため、各グループで一意値を持つことが保証されているのはこのエレメントだけです。

    上の式は、出力値が現在のグループの最初の項目にあるstore_locationエレメントの値となることを示しています。

  5. departmentsエレメントをクリックして次の式を入力します。
    FROM gstore
    GROUP BY department_name
    GROUP AS gdepartment

    これはstoresエレメントと同じ処理を行いますが、ここでは一意のdepartment_name値ごとにdepartments配列の出現を1回生成します。

  6. departmentsの下にあるname出力エレメントにdepartment_nameをドラッグ&ドロップし、saledperson_id出力エレメントをクリックして次の式を入力します。
    gdepartment[0].salesperson_id
  7. items出力エレメントをクリックしてFROM gdepartmentと入力し、itemsの下にあるnameエレメントにitem_nameをドラッグ&ドロップします。

タスクの結果

マップが設定され、[Test Run] (テスト実行)機能を使った結果をチェックできるようになります。この例では、次の結果が返されます。
{
   "stores":[
      {
         "name":"plusstore",
         "location":"saint louis",
         "departments":[
            {
               "name":"electronics",
               "salesperson_id":"32",
               "items":[
                  {
                     "name":"Portable SSD T5"
                  },
                  {
                     "name":"Extreme Portable SSD"
                  }
               ]
            },
            {
               "name":"sports",
               "salesperson_id":"25",
               "items":[
                  {
                     "name":"MBIKE"
                  },
                  {
                     "name":"ESCOOT"
                  }
               ]
            }
         ]
      },
      {
         "name":"goodstore",
         "location":"nashville",
         "departments":[
            {
               "name":"electronics",
               "salesperson_id":"47",
               "items":[
                  {
                     "name":"Toshiba P300"
                  }
               ]
            },
            {
               "name":"fresh",
               "salesperson_id":"47",
               "items":[
                  {
                     "name":"Italian tomatoes"
                  }
               ]
            }
         ]
      }
   ]
}

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

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