LIMIT 句は、返された検索結果に制限を適用します。LIMIT は、非集約クエリと集約クエリでは動作が異なります。
構文は次のとおりです。
[LIMIT integer [, integer]...]
integer は一連の数字です。ORDER BY がクエリで指定されていない場合、結果は降順のタイムスタンプ順にソートされます。Analytics 検索 UI では、1 万件のレコードで検索結果の数に上限が適用されます。
非集約クエリ
非集約クエリで最初の N 件のドキュメントを返すには、LIMIT N を指定します。
SELECT * FROM transactions LIMIT 10
非集約クエリの場合、Analytics クエリ API を使用して最大 1 万件の結果を返すことができます。1 万よりも高い制限値が指定されている場合、値は最大値で上書きされます。
集約クエリ
集約クエリの場合、LIMIT 句で値のリストを使用できます。各値は、クエリの 1 つの「group by」用語またはバケット関数に適用されます。「group by」という用語は、集約クエリのフィールド名です。次の例では、field1 と field3 が group by 用語で、series
(field2, '1m') がバケット関数です。
SELECT field1, series
(field2, '1m'), field3, count
(*) …
バケット関数は、LIMIT 句の値リストの値を使用しますが、その値は、このような関数には適用されないため、無視されます。デフォルトの制限は 10 であるため、ユーザ指定の制限よりも多くのバケット関数がある場合、LIMIT 句では 10 個のバケットが使用されます。たとえば、2 つの制限値が指定されていても、制限値を使用する可能性のある 3 つの関数または用語がある場合、最後の値はデフォルトの 10 に制限されます。
バケットの最大数は、最初の group by 用語またはバケット関数に対して 1000 です。後続の用語は 100 個のバケットに制限されます。これより大きい値は上書きされ、最大値に置き換えられます。集約クエリは、最大で 1 万件の結果を返すことができます。
制限用の REST API の使用方法は若干異なります。「分析イベント API」を参照してください。
集約の例
クエリ | 結果 |
---|
SELECT transactionName, avg (responseTime) FROM transactions | 制限が指定されていない場合、最大で上位 10 件の結果が表示されます。 |
SELECT DISTINCT requestGUID FROM transactions | 制限が指定されていない場合、上位 10 件の結果が表示されます。 |
SELECT transactionName, avg (responseTime) FROM transactions LIMIT 50 | 上位 50 件の結果が返されます。 |
SELECT application, transactionName, avg (responseTime) FROM transactions LIMIT 500, 50 | 上位 500 件の application が返されます。 これらの各バケット内には、上位 50 件の transactionName があります。 |
SELECT application, transactionName, avg (responseTime) FROM transactions LIMIT 2000, 500 | 制限が適用されているため、このクエリでは上位 1000 件の application が返されます。 これらの各バケット内には、上位 100 件の transactionName があります。 |
SELECT application, transactionName, avg (responseTime) FROM transactions LIMIT 20 | 上位 20 件の application が返されます。これらの各バケット内には上位 10 件 (デフォルトを使用)の transactionName があります。 |
SELECT application, series (eventTimestamp, '1m'), transactionName, avg (responseTime) FROM transactions LIMIT 20, 25, 30 | 上位 20 件の application が返されます。 これらの内部には、すべてのデータを含む date-time series が含まれます。 各 date-time series バケット内では、上位 30 件の transactionName が示されます。 値 25 は series 関数に適用されますが、series はバケット関数であるため、実際にはこの制限を使用しません。 |
SELECT application, series (eventTimestamp, '1m'), transactionName, avg (responseTime) FROM transactions LIMIT 20, 25 | 上位 20 件の application が返されます。 これらの内部では、すべてのデータを含む date-time series が示されます。 各 date-time series バケット内では、上位 10 件(デフォルトを使用)の transactionName が示されます。 値 25 は series 関数に適用されますが、series はバケット関数であるため、実際にはこの制限を使用しません。 |
SELECT series (eventTimestamp, '1m'), avg (responseTime) FROM transactions LIMIT 20 | LIMIT は関数には適用されず、group by 用語にのみ適用されます。したがって、このクエリでは、制限値は影響せず、クエリにより series 関数のすべてのデータが返されます。 |