インデックスを作成するときは、フィールドのデータ型をtext、long、double、またはJSONに設定できます。 このトピックでは、フィールドのデータ型について説明し、いくつかの例を示します。
テキストタイプ
文字列型のログデータをクエリおよび分析するには、インデックスを設定するときに関連フィールドのデータ型をテキストに設定する必要があります。 また、これらのフィールドの分析を有効にする必要があります。
既定では、フルテキストインデックスをオンにすると、__time__ フィールドを除くすべてのフィールドのデータ型がテキストに設定されます。
サンプルログ
インデックス設定
クエリ文
GETリクエストを含まないログを照会するには、次の検索文を実行します。
not request_method : GET
cnで始まるログを照会するには、次の検索文を実行します。
cn*
クライアントの分布に関する統計を収集するには、次のクエリステートメントを実行します。
* | SELECT ip_to_province(client_ip) as province, count(*) AS pv GROUP BY province ORDER BY pv
ロングタイプとダブルタイプ
フィールドのデータ型をlongまたはdoubleに設定した後にのみ、数値範囲を使用してフィールドの値を照会できます。
フィールドの値が整数の場合、インデックスを設定するときにフィールドのデータ型をlongに設定することを推奨します。
フィールドの値が浮動小数点数の場合、インデックスを設定するときにフィールドのデータ型をdoubleに設定することを推奨します。
フィールドのデータ型をlongに設定しても、フィールドの値が浮動小数点数の場合、フィールドをクエリすることはできません。
フィールドのデータ型をlongまたはdoubleに設定しても、フィールドの値が文字列の場合、フィールドをクエリできません。
フィールドのデータ型をlongまたはdoubleに設定した場合、アスタリスク (*) または疑問符 (?) を使用してフィールドを照会することはできません。 文字は、ファジーマッチを実行するために使用される。
フィールドの値が無効な数値の場合、not key > -1000000の検索文を使用してフィールドを照会できます。 このステートメントは、フィールドの値が無効な数値であるログを返します。 -1000000は、ログ内のフィールドの有効な数値の最小値以下の有効な数値に置き換えることができます。
サンプルログ
インデックス設定
クエリ文
リクエスト期間が60秒を超えるログを照会するには、次の検索文を実行します。
request_time > 60
リクエスト期間が60秒以上200秒未満のログを照会するには、次のいずれかの検索文を実行します。
request_time in [60 200)
request_time >= 60 and request_time < 200
応答ステータスコードが200のログを照会するには、次の検索文を実行します。
status = 200
JSON データ型
フィールドの値がJSON形式の場合、インデックスを設定するときにフィールドのデータ型をJSONに設定できます。
フィールドの値に基づいて、JSONオブジェクトのフィールドのデータ型をlong、double、またはtextに設定し、そのフィールドの分析を有効にすることができます。 Enable Analyticsをオンにすると、Simple Log Serviceでフィールドのクエリと分析ができます。
[JSONフィールドのすべてのテキストフィールドを自動的にインデックスする] を選択すると、JSONオブジェクトのテキストタイプのすべてのフィールドに対してインデックスが自動的に作成されます。 インデックスが作成されると、インデックストラフィックが生成されます。
部分的に有効なJSON形式のデータの場合、Simple Log Serviceはデータの有効な部分のみを解析できます。
次の例は、不完全なJSONログを示しています。 Simple Log Serviceでは、content.remote_addr、content.request.request_length、およびcontent.request.request_methodフィールドを解析できます。
content: { remote_addr:"192.0.2.0" request: { request_length:"73" request_method:"GE
関連ドキュメント
使用シナリオとJSONログのクエリと分析に関するFAQについては、「JSONログのクエリと分析に関するFAQ」をご参照ください。 FAQには、インデックスの設定、インデックス付きJSONフィールドのクエリと分析、JSON関数の使用、JSON配列の分析方法に関する情報が含まれています。
JSONログのクエリと分析の設定と手順については、「JSONログのクエリと分析」をご参照ください。
クエリおよび分析するJSONログのデータ量が少ない場合、JSONリーフノードのインデックスを設定する必要はありません。 この場合、JSON関数を使用してログを照会および分析できます。 いくつかの特別なシナリオでは、クエリと分析にJSON関数のみを使用できます。 シナリオの詳細については、JSON関数を使用する必要があるのはいつですか? JSON関数の説明と例の詳細については、「JSON関数」をご参照ください。
JSONオブジェクトのリーフノードのインデックスを設定できます。 リーフノードを含む子ノードのインデックスは設定できません。
値がJSON配列であるフィールドのインデックス、またはJSON配列内のフィールドのインデックスを設定することはできません。
フィールドの値がブール型の場合、インデックスを設定するときにフィールドのデータ型をテキストに設定できます。
クエリステートメントは、
Searchステートメント | Analyticステートメント
形式です。 分析ステートメントでは、フィールド名を二重引用符 ("") で囲み、文字列を一重引用符 (") で囲む必要があります。
サンプルログ
次の図は、JSONログの例を示しています。 ログには、Simple log Serviceの予約フィールドに加えて、class、latency、status、およびinfoフィールドが含まれます。 infoフィールドの値は、複数のレイヤーを含むJSONオブジェクトです。
インデックス設定
次のリストに詳細を示します。
IPフィールドとdataフィールドの値はJSON配列です。 したがって、IPまたはdataフィールドにインデックスを設定することはできません。 フィールドを使用してデータを照会または分析することはできません。
regionフィールドとCreateTimeフィールドはJSON配列です。 したがって、regionまたはCreateTimeフィールドにインデックスを設定することはできません。 フィールドを使用してデータを照会または分析することはできません。
クエリ文
usedTimeフィールドの値が60秒を超えるログを照会するには、次の検索文を実行します。
info.usedTime > 60
successフィールドの値がtrueのログを照会するには、次の検索文を実行します。
info.success : true
usedTimeフィールドの値が60秒を超え、projectNameフィールドの値がproject01でないログを照会するには、次の検索文を実行します。
info.usedTime > 60 not info.param.projectName : project01
プロジェクト情報の取得に必要な平均期間を計算するには、次のクエリ文を実行します。
methodName = getProjectInfo | SELECT avg("info.usedTime") AS avg_time