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

条件に基づいて値を割り当て

Data Shaping Languageを使い、条件に応じた値を持つレコードを生成します。

このタスクについて

この例では、以下のJSON入力を使います。これには、各顧客のID、名前、住所、評価が含まれているcustomer配列が含まれています。

この変換の目的は、nameエレメントとinfoエレメントを持つ顧客の配列を返すことです。infoの値はratingの値によって変化します。
  • 顧客に評価がない場合、infoは値が'No info'である文字列となります。
  • 顧客の評価が0〜600の場合、infoは、値がStandardであるcategoryエレメントと顧客の都市が含まれているオブジェクトとなります。
  • それ以外の場合、infoには、値がGoldであるcategoryエレメントと顧客の完全アドレスが含まれます。
{
  "customer": [
    {
      "custid": "C13",
      "name": "T. Cruise",
      "address": {
        "street": "201 Main St.",
        "city": "St. Louis, MO",
        "zipcode": "63101"
      },
      "rating": 750
    },
    {
      "custid": "C25",
      "name": "M. Streep",
      "address": {
        "street": "690 River St.",
        "city": "Hanover, MA",
        "zipcode": "02340"
      },
      "rating": 690
    },
    {
      "custid": "C31",
      "name": "B. Pitt",
      "address": {
        "street": "360 Mountain Ave.",
        "city": "St. Louis, MO",
        "zipcode": "63101"
      }
    },
    {
      "custid": "C35",
      "name": "J. Roberts",
      "address": {
        "street": "420 Green St.",
        "city": "Boston, MA",
        "zipcode": "02115"
      },
      "rating": 565
    },
    {
      "custid": "C37",
      "name": "T. Hanks",
      "address": {
        "street": "120 Harbor Blvd.",
        "city": "Boston, MA",
        "zipcode": "02115"
      },
      "rating": 750
    },
    {
      "custid": "C41",
      "name": "R. Duvall",
      "address": {
        "street": "150 Market St.",
        "city": "St. Louis, MO",
        "zipcode": "63101"
      },
      "rating": 640
    },
    {
      "custid": "C47",
      "name": "S. Loren",
      "address": {
        "street": "Via del Corso",
        "city": "Rome, Italy"
      },
      "rating": 625
    }
  ]
}

手順

  1. customer配列を呼び出すFROM customer句を作成します。
  2. 入力nameinfoという新しいエレメントを返すSELECT句を作成します。
  3. infoの値として使用する条件式を定義します。
    1. 顧客に評価がない場合は、infoの値を'No info'に設定します。その結果、IF (rating == null) 'No info'となります。
    2. ratingの値が0~600の場合は、infoの値を、値が'Standard'であるcategoryエレメントと顧客の都市を持つオブジェクトに設定します。その結果、ELSEIF rating BETWEEN 0 AND 600 { category = 'Standard', city = address.city }となります。
    3. その他の場合は、infoの値を、値が'Gold'であるcategoryエレメントと顧客の完全アドレスを持ち、1つの文字列に連結されているオブジェクトに設定します。その結果、ELSE { category = 'Gold', address = concatWith(', ', address.street, address.city) }となります。

タスクの結果

クエリーは次のようになります:
FROM customer
SELECT {
   name,
   info =
      IF (rating == null) 
		'No info'
      ELSEIF rating BETWEEN 0 AND 600 { 
			category = 'Standard', 
			city = address.city 
		}
      ELSE { 
	  category = 'Gold', 
	  address = concatWith(', ', address.street, address.city) 
	  }
}
以下の結果が返されます:
[
    {
        "name": "T. Cruise",
        "info": {
            "category": "Gold",
            "address": "201 Main St., St. Louis, MO"
        }
    },
    {
        "name": "M. Streep",
        "info": {
            "category": "Gold",
            "address": "690 River St., Hanover, MA"
        }
    },
    {
        "name": "B. Pitt",
        "info": "No info"
    },
    {
        "name": "J. Roberts",
        "info": {
            "category": "Standard",
            "city": "Boston, MA"
        }
    },
    {
        "name": "T. Hanks",
        "info": {
            "category": "Gold",
            "address": "120 Harbor Blvd., Boston, MA"
        }
    },
    {
        "name": "R. Duvall",
        "info": {
            "category": "Gold",
            "address": "150 Market St., St. Louis, MO"
        }
    },
    {
        "name": "S. Loren",
        "info": {
            "category": "Gold",
            "address": "Via del Corso, Rome, Italy"
        }
    }
]

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

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