メインコンテンツまでスキップ
バージョン: Candidate-3.5

JSON operators

StarRocks は次の JSON 比較演算子をサポートしています: <, <=, >, >=, =, および !=。これらの演算子を使用して JSON データをクエリできます。ただし、StarRocks では IN を使用して JSON データをクエリすることはできません。

  • 演算子のオペランドは両方とも JSON 値でなければなりません。

  • 演算子のオペランドの一方が JSON 値であり、他方がそうでない場合、演算中に JSON 値でないオペランドは JSON 値に変換されます。変換ルールの詳細については、 CAST を参照してください。

ヒント

すべての JSON 関数と演算子はナビゲーションと overview page にリストされています。

クエリを高速化するには、 generated columns を使用してください。

算術ルール

JSON 演算子は次の算術ルールに従います:

  • 演算子のオペランドが同じデータ型の JSON 値である場合:
    • 両方のオペランドが NUMBER、STRING、BOOLEAN などの基本データ型の JSON 値である場合、演算子は基本データ型の算術ルールに従って算術演算を行います。

Note: 両方のオペランドが数値であるが、一方が DOUBLE 値で他方が INT 値である場合、演算子は INT 値を DOUBLE 値に変換します。

  • 両方のオペランドが OBJECT または ARRAY などの複合データ型の JSON 値である場合、演算子は最初のオペランドのキーの順序に基づいてオペランド内のキーを辞書順にソートし、オペランド間でキーの値を比較します。

例 1:

最初のオペランドが {"a": 1, "c": 2} で、2 番目のオペランドが {"b": 1, "a": 2} である場合、この例では演算子はオペランド間のキー a の値を比較します。最初のオペランドのキー a の値は 1 であり、2 番目のオペランドのキー a の値は 2 です。値 1 は値 2 より大きいです。したがって、演算子は最初のオペランド {"a": 1, "c": 2} が 2 番目のオペランド {"b": 1, "a": 2} より小さいと結論付けます。

mysql> SELECT PARSE_JSON('{"a": 1, "c": 2}') < PARSE_JSON('{"b": 1, "a": 2} ');

-> 1

例 2:

最初のオペランドが {"a": 1, "c": 2} で、2 番目のオペランドが {"b": 1, "a": 1} である場合、この例では演算子はまずオペランド間のキー a の値を比較します。オペランドのキー a の値は両方とも 1 です。次に、演算子はオペランドのキー c の値を比較します。2 番目のオペランドにはキー c が含まれていません。したがって、演算子は最初のオペランド {"a": 1, "c": 2} が 2 番目のオペランド {"b": 1, "a": 1} より大きいと結論付けます。

mysql> SELECT PARSE_JSON('{"a": 1, "c": 2}') < PARSE_JSON('{"b": 1, "a": 1}');

-> 0
  • 演算子のオペランドが異なるデータ型の JSON 値である場合、演算子は次の算術ルールに従ってオペランドを比較します: NULL < BOOLEAN < ARRAY < OBJECT < DOUBLE < INT < STRING.
mysql> SELECT PARSE_JSON('"a"') < PARSE_JSON('{"a": 1, "c": 2}');

-> 0