順序変換式

順序変換式は、順序を別の順序に変換します。構文的には、seq_transformという名前の関数のように見えます。最初の引数は、変換する順序(入力順序)を生成する式であり、2番目の引数は入力順序の各項目に対して計算されるマッパー式です。seq_transform式の結果は、マッパー式の各評価によって生成される順序の連結となります。マッパー式は、$変数を介して現在の入力項目にアクセスできます。

例: ticketNoごとに、そのticketNoの手荷物に対して実行されたすべてのアクションを含むフラット配列をフェッチします。
SELECT seq_transform(l.bagInfo[],
      seq_transform(
          $sq1.flightLegs[],
          seq_transform(
              $sq2.actions[],
              {
                "at" : $sq3.actionAt,
                "action" : $sq3.actionCode,
                "flightNo" : $sq2.flightNo,
                "tagNum" : $sq1.tagNum
              }
          )
      )
  ) AS actions
FROM baggageInfo l WHERE ticketNo=1762340683564

説明: 表の行に格納されたJSONドキュメントを変換するために、順序変換式を使用できます。このような場合、相互にネストされている複数の順序変換式を使用することがよくあります。ここで、内部の順序変換マッパー式は、外部の順序変換の現在の項目にアクセスすることが必要な場合があります。これを可能にするために、各順序変換式Sは$sqNという名前の変数を宣言します。ここで、Nは、外部順序変換式内の式Sのネストのレベルです。$sqNは基本的に$のシノニムであり、入力式Sによって返される項目にバインドされます。ただし、$sqNは、式S内でネストできる他の順序変換式によりアクセスできます。

出力:
{ 
 "actions":[ 
   {"action":"ONLOAD to HKG","at":"YYZ","flightNo":"BM267","tagNum":"17657806299833"},
   {"action":"BagTag Scan at YYZ","at":"YYZ","flightNo":"BM267","tagNum":"17657806299833"},
   {"action":"Checkin at YYZ","at":"YYZ","flightNo":"BM267","tagNum":"17657806299833"},
   {"action":"Offload to Carousel at BLR","at":"BLR","flightNo":"BM115","tagNum":"17657806299833"},
   {"action":"ONLOAD to BLR","at":"HKG","flightNo":"BM115","tagNum":"17657806299833"},
   {"action":"OFFLOAD from HKG","at":"HKG","flightNo":"BM115","tagNum":"17657806299833"} 
 ]
}