数値または文字列へのデータのキャスト
Sumo Logic では、ほとんどのデータが文字列として保存されます。メタデータ フィールドも文字列データとして保存され、parse されたフィールドは、デフォルトでは文字列データとして parse されます。Sumo Logic では、計算を実行する場合や sum または avg といった関数を使用する場合など、動作の実行には明らかに数値が必要だと判断できる状況では、暗黙的に文字列データを数値にキャストします。一方で、数値が必要であるかどうかが曖昧な状況では、文字列データは文字列のままとなります。
クエリを作成する際には、この情報が重要になります。期待通りの結果を得るために手動で文字列データを数値にキャストする必要があるケースは少なくとも 2 つあります。
- where operator を次のように使用して整数と一致させる場合:
- where value in (integer_value1, integer_value2, integer_value3)
- where value not in (integer_value1, integer_value2, integer_value3)
- 次のようにクエリの結果を数値でソートする場合:
* | parse "took *ms" as duration | toLong(duration) | sort by duration
最初のケースでは、ステートメントを「where some_value in (1, 2, 4, 16)」のように指定して整数と一致させる (または一致させない) 場合は、最初に「some_value」を数値にキャストする必要があります。
2 番目のケースでは、最初に「duration」を数値にキャストせずにテキスト値のままにしておくと、結果が正しくソートされません。フィールドを数値にキャストしておけば、期待通りのソート結果が得られます。
Sumo Logic では、文字列から数値へのキャストで以下の関数をサポートしています。
num()
またはnumber()
toLong()
toString()
関数を使用すると、データを文字列にキャストできます。
フィールドをキャストする場合は、キャスト ステートメントを次のようにパイプで分離することを忘れないでください。
* | parse "OSload *ms" as boot_time | number(boot_time)