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

機能の違い

Availability-noteBeta
次の機能は標準マップとDSQLマップの両方で使用できますが、動作が異なります。

ループおよび部分文字列ファンクション内のインデックス

標準マップでは、LoopIndexファンクションを使ってループインデックスを参照できます。この場合、最初の出現のインデックスは1です。詳細は、LoopIndexをご覧ください。

DSQLマップでは、FROM句でINDEXキーワードを使ってループインデックスを参照できます。この場合、最初の出現のインデックスは0です。詳細は、FROM句を使うをご覧ください。

部分文字列ファンクションにも同じ違いが当てはまります。標準のSubstringファンクションでは最初の文字のインデックスは1ですが、DSQLのsubStringファンクションでは最初の文字のインデックスは0です。

グルーピング

標準マップでは、SimpleLoopファンクションのDistinctファンクションを使ってエレメントをグルーピングできます。この機能によって、グループピングエレメントの値が入力データで見つかった順序でグループが返されます。詳細は、SimpleLoopをご覧ください。

DSQLマップでは、エレメントはGROUP BY句でグルーピングできます。グループは未定義の順序で返されます。詳細は、GROUP BY句を使うをご覧ください。

ループの展開と分割

DSQLマップでは、ループを展開または分割した場合、新しく作成されるループは次の機能をサポートしていません:
  • 変数を定義するLET句とSET
  • 条件式

これらの機能は引き続き元のループで使用できます。

文字列の書式設定

入力エレメントにNULL値があり、出力エレメントがNULLableでないとマークされた文字列である場合、標準マップは空の文字列を返します。DSQLマップでは、Nullable属性は無視され、NULL値が返されます。

数字の書式設定

  • 入力データが数値制約に一致しない場合、標準マップでは警告を表示して処理を続行しますが、DSQLマップでは例外を表示して処理を停止します。
  • 出力で数値が固定サイズの文字列として書式設定されている場合、標準マップではその値はスペースで右詰めにされますが、DSQLマップではゼロで左詰めにされます。
  • DSQLマップでは、分数を含む数値表現はFloatデータ型を使って処理されます。出力エレメントが明示的なスケールを持たないDecimalとして定義されている場合、結果はFloatのスケールを保持します。これは標準マップの場合とは異なります。たとえば式の結果が0.20000000298023224であれば、DSQLマップはこの値を返しますが、標準マップは0.2を返します。DSQLマップでformatNumberファンクションを使えば、出力を書式設定できます。

ネスト化された空の配列

ネスト化された配列での反復処理中に空の配列に遭遇した場合、標準マップとDSQLマップでは動作が異なります。

たとえば次のJSON入力では、レコードの配列を取得するためにこれをフラット化し、姓と名が1つずつ含まれているレコードの配列を取得することが目的です。
[
	{
		"lastname" : "Cruise",
		"firstnames" : [ "Tom", "Robert" ]
	},
	{
		"lastname" : "Ford",
		"firstnames" : [ ]
	}
]
標準マップでは、これはルート配列を反復処理するSimpleLoopファンクションと、firstnames配列を反復処理するSimpleLoopを持つNestedContextを使って行われます。このケースでは、マップが次の結果を返します:
[
  {
    "lastname": "Cruise",
    "firstname": "Tom"
  },
  {
    "lastname": "Cruise",
    "firstname": "Robert"
  },
  {
    "lastname": "Ford",
    "firstname": ""
  }
]
ただし、DSQLマップでFROM句の後にUNNEST句を使用すると、マップは以下の結果を返します:
[
   {
      "lastname": "Cruise",
      "firstname": "Tom"
   },
   {
      "lastname": "Cruise",
      "firstname": "Robert"
   }
]

DSQLマップの場合、対応するfirstnames配列が空である(つまり反復処理するものがなかった)ため、Fordというラストネームは無視されます。

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

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