vtlim commented on code in PR #14589: URL: https://github.com/apache/druid/pull/14589#discussion_r1276834939
########## docs/api-reference/json-querying-api.md: ########## @@ -23,14 +23,872 @@ sidebar_label: JSON querying ~ under the License. --> -This document describes the API endpoints to submit JSON-based [native queries](../querying/querying.md) to Apache Druid. +This topic describes the API endpoints to submit JSON-based [native queries](../querying/querying.md) to Apache Druid. -## Queries +In this topic, `http://SERVICE_IP:SERVICE_PORT` is a placeholder for the server address of deployment and the service port. For example, on the quickstart configuration, replace `http://ROUTER_IP:ROUTER_PORT` with `http://localhost:8888`. -`POST /druid/v2/` -The endpoint for submitting queries. Accepts an option `?pretty` that pretty prints the results. +## Submit a query -`POST /druid/v2/candidates/` +Submits a JSON-based native query. -Returns segment information lists including server locations for the given query. \ No newline at end of file +Queries are composed of various JSON properties and Druid has different types of queries for different use cases. The possible types of queries are: `timeseries`, `topN`, `groupBy`, `timeBoundaries`, `segmentMetadata`, `datasourceMetadata`, `scan`, and `search`. For guidance on constructing the requests and choosing query types, see [available native queries](../querying/querying.md#available-queries). + +### URL + +<code class="postAPI">POST</code> <code>/druid/v2/</code> + +### Query parameters + +* `pretty` (optional) + * Druid returns the response in a pretty-printed format using indentation and line breaks. + +### Responses + +<!--DOCUSAURUS_CODE_TABS--> + +<!--200 SUCCESS--> + +*Successfully submitted query* + +<!--400 BAD REQUEST--> + +*Error thrown due to bad query. Returns a JSON object detailing the error with the following format:* + +```json +{ + "error": "A well-defined error code.", + "errorMessage": "A message with additional details about the error.", + "errorClass": "Class of exception that caused this error.", + "host": "The host on which the error occurred." +} +``` +For more information on possible error messages, see [query execution failures](../querying/querying.md#query-execution-failures). + +<!--END_DOCUSAURUS_CODE_TABS--> + +--- + +### Sample request: `topN` Review Comment: What if we made the request/response a single subheading since they're more closely related than the other stuff in this section?  So we could call this one: ```suggestion ### Example query: `topN` ``` And then either remove the response subheading or make it an H4 (####) ########## docs/api-reference/json-querying-api.md: ########## @@ -23,14 +23,872 @@ sidebar_label: JSON querying ~ under the License. --> -This document describes the API endpoints to submit JSON-based [native queries](../querying/querying.md) to Apache Druid. +This topic describes the API endpoints to submit JSON-based [native queries](../querying/querying.md) to Apache Druid. -## Queries +In this topic, `http://SERVICE_IP:SERVICE_PORT` is a placeholder for the server address of deployment and the service port. For example, on the quickstart configuration, replace `http://ROUTER_IP:ROUTER_PORT` with `http://localhost:8888`. -`POST /druid/v2/` -The endpoint for submitting queries. Accepts an option `?pretty` that pretty prints the results. +## Submit a query -`POST /druid/v2/candidates/` +Submits a JSON-based native query. -Returns segment information lists including server locations for the given query. \ No newline at end of file +Queries are composed of various JSON properties and Druid has different types of queries for different use cases. The possible types of queries are: `timeseries`, `topN`, `groupBy`, `timeBoundaries`, `segmentMetadata`, `datasourceMetadata`, `scan`, and `search`. For guidance on constructing the requests and choosing query types, see [available native queries](../querying/querying.md#available-queries). + +### URL + +<code class="postAPI">POST</code> <code>/druid/v2/</code> + +### Query parameters + +* `pretty` (optional) + * Druid returns the response in a pretty-printed format using indentation and line breaks. + +### Responses + +<!--DOCUSAURUS_CODE_TABS--> + +<!--200 SUCCESS--> + +*Successfully submitted query* + +<!--400 BAD REQUEST--> + +*Error thrown due to bad query. Returns a JSON object detailing the error with the following format:* + +```json +{ + "error": "A well-defined error code.", + "errorMessage": "A message with additional details about the error.", + "errorClass": "Class of exception that caused this error.", + "host": "The host on which the error occurred." +} +``` +For more information on possible error messages, see [query execution failures](../querying/querying.md#query-execution-failures). + +<!--END_DOCUSAURUS_CODE_TABS--> + +--- + +### Sample request: `topN` + +The following example submits a JSON query of the `topN` type to retrieve a ranked list of users and their post views. Review Comment: ```suggestion The following example shows a `topN` query. The query analyzes the `social_media` datasource to return the top five users from the `username` dimension with the highest number of views from the `views` metric.. ``` ########## docs/api-reference/json-querying-api.md: ########## @@ -23,14 +23,872 @@ sidebar_label: JSON querying ~ under the License. --> -This document describes the API endpoints to submit JSON-based [native queries](../querying/querying.md) to Apache Druid. +This topic describes the API endpoints to submit JSON-based [native queries](../querying/querying.md) to Apache Druid. -## Queries +In this topic, `http://SERVICE_IP:SERVICE_PORT` is a placeholder for the server address of deployment and the service port. For example, on the quickstart configuration, replace `http://ROUTER_IP:ROUTER_PORT` with `http://localhost:8888`. -`POST /druid/v2/` -The endpoint for submitting queries. Accepts an option `?pretty` that pretty prints the results. +## Submit a query -`POST /druid/v2/candidates/` +Submits a JSON-based native query. -Returns segment information lists including server locations for the given query. \ No newline at end of file +Queries are composed of various JSON properties and Druid has different types of queries for different use cases. The possible types of queries are: `timeseries`, `topN`, `groupBy`, `timeBoundaries`, `segmentMetadata`, `datasourceMetadata`, `scan`, and `search`. For guidance on constructing the requests and choosing query types, see [available native queries](../querying/querying.md#available-queries). Review Comment: >Queries are composed of various JSON properties Hm, I feel like this doesn't say much since the request body can include different types of properties. Could we give light guidance on what is required for a request body. For example: ``` All queries require the following properties: * `queryType`: A string representing type of query. Druid supports the following native query types: <LIST> * `dataSource`: A string or object defining the source of data to query. The most common value is the name of the datasource to query. For more information, see [Datasources](../querying/datasources.md). For additional properties based on your query type or use case, see [available native queries](../querying/querying.md#available-queries). ``` ########## docs/api-reference/json-querying-api.md: ########## @@ -23,14 +23,872 @@ sidebar_label: JSON querying ~ under the License. --> -This document describes the API endpoints to submit JSON-based [native queries](../querying/querying.md) to Apache Druid. +This topic describes the API endpoints to submit JSON-based [native queries](../querying/querying.md) to Apache Druid. -## Queries +In this topic, `http://SERVICE_IP:SERVICE_PORT` is a placeholder for the server address of deployment and the service port. For example, on the quickstart configuration, replace `http://ROUTER_IP:ROUTER_PORT` with `http://localhost:8888`. -`POST /druid/v2/` -The endpoint for submitting queries. Accepts an option `?pretty` that pretty prints the results. +## Submit a query -`POST /druid/v2/candidates/` +Submits a JSON-based native query. -Returns segment information lists including server locations for the given query. \ No newline at end of file +Queries are composed of various JSON properties and Druid has different types of queries for different use cases. The possible types of queries are: `timeseries`, `topN`, `groupBy`, `timeBoundaries`, `segmentMetadata`, `datasourceMetadata`, `scan`, and `search`. For guidance on constructing the requests and choosing query types, see [available native queries](../querying/querying.md#available-queries). + +### URL + +<code class="postAPI">POST</code> <code>/druid/v2/</code> + +### Query parameters + +* `pretty` (optional) + * Druid returns the response in a pretty-printed format using indentation and line breaks. + +### Responses + +<!--DOCUSAURUS_CODE_TABS--> + +<!--200 SUCCESS--> + +*Successfully submitted query* + +<!--400 BAD REQUEST--> + +*Error thrown due to bad query. Returns a JSON object detailing the error with the following format:* + +```json +{ + "error": "A well-defined error code.", + "errorMessage": "A message with additional details about the error.", + "errorClass": "Class of exception that caused this error.", + "host": "The host on which the error occurred." +} +``` +For more information on possible error messages, see [query execution failures](../querying/querying.md#query-execution-failures). + +<!--END_DOCUSAURUS_CODE_TABS--> + +--- + +### Sample request: `topN` + +The following example submits a JSON query of the `topN` type to retrieve a ranked list of users and their post views. + +<!--DOCUSAURUS_CODE_TABS--> + +<!--cURL--> + +```shell +curl "http://ROUTER_IP:ROUTER_PORT/druid/v2?pretty=null" \ +--header 'Content-Type: application/json' \ +--data '{ + "queryType": "topN", + "dataSource": "social_media", + "dimension": "username", + "threshold": 5, + "metric": "views", + "granularity": "all", + "aggregations": [ + { + "type": "longSum", + "name": "views", + "fieldName": "views" + } + ], + "intervals": [ + "2022-01-01T00:00:00.000/2024-01-01T00:00:00.000" + ] +}' +``` +<!--HTTP--> + +```HTTP +POST /druid/v2?pretty=null HTTP/1.1 +Host: http://ROUTER_IP:ROUTER_PORT +Content-Type: application/json +Content-Length: 336 + +{ + "queryType": "topN", + "dataSource": "social_media", + "dimension": "username", + "threshold": 5, + "metric": "views", + "granularity": "all", + "aggregations": [ + { + "type": "longSum", + "name": "views", + "fieldName": "views" + } + ], + "intervals": [ + "2022-01-01T00:00:00.000/2024-01-01T00:00:00.000" + ] +} +``` + +<!--END_DOCUSAURUS_CODE_TABS--> + +### Sample response: `topN` + +<details> + <summary>Click to show sample response</summary> + + ```json +[ + { + "timestamp": "2023-07-03T18:49:54.848Z", + "result": [ + { + "views": 11591218026, + "username": "gus" + }, + { + "views": 11578638578, + "username": "miette" + }, + { + "views": 11561618880, + "username": "leon" + }, + { + "views": 11552609824, + "username": "mia" + }, + { + "views": 11551537517, + "username": "milton" + } + ] + } +] + ``` +</details> + +### Sample request: `groupBy` + +The following example submits a JSON query of the `groupBy` type to retrieve the `username` with the highest votes to posts ratio from the `social_media` datasource. + +In this query: +* The `upvoteSum` aggregation calculates the sum of the `upvotes` for each user. +* The `postCount` aggregation calculates the sum of posts for each user. +* The `upvoteToPostRatio` is a post-aggregation of the `upvoteSum` and the `postCount`, divided to calculate the ratio. +* The result is sorted based on the `upvoteToPostRatio` and in descending order. Review Comment: ```suggestion * The result is sorted based on the `upvoteToPostRatio` in descending order. ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
