13.9 JSON_TRANSFORMの演算子KEEP

JSON_TRANSFORMの演算子KEEPは、指定されているどのパス式でも対象となっていない、入力データのすべての部分を削除します。

演算子KEEPは例外です。つまり、それの後に複数のパス式を続けることができます。これは代入操作ではありません(=やRHSはありません)。

少なくとも1つのパス式が必要であるため、KEEPを使用して、何も保持しないように指定することはできません。そのため、KEEPを使用して最上位のオブジェクトまたは配列を削除することはできません。

例13-17 JSON_TRANSFORM: 特定のフィールドのみを保持

このjson_transformの結果には、フィールドaとdのみが保持されます。

SELECT json_transform('{"a":1, "b":2, "c":3, "d":4}',
                      KEEP '$.a', '$.d')

結果:

{"a:1", "d":4}

例13-18 JSON_TRANSFORM: 述語を満たす値があるフィールドのみを保持

この結果では、値が2より大きいフィールドのみが保持されます。ワイルドカード*によってすべてのフィールドが指定されています。また、述語@>2により、2より大きいフィールド値を必要としています。

SELECT json_transform('{"a":1, "b":2, "c":3, "d":4}',
                      KEEP '$.*?(@ > 2)')

結果:

{"c:3", "d":4}

KEEP操作の使用は、NESTED PATH操作内で使用することで有効範囲を限定できます。ネストされたパスで定義されたスコープの外側のデータは、KEEPプルーニングによる影響を受けません。例13-21ではこれを示しています。

演算子KEEPで使用できるハンドラは、IGNORE ON MISSING (デフォルト)、ERROR ON MISSINGです。