restore information about truncated responses to sql api (#16001)

Co-authored-by: 317brian <53799971+317brian@users.noreply.github.com>
Co-authored-by: Victoria Lim <lim.t.victoria@gmail.com>
This commit is contained in:
Charles Smith 2024-03-06 14:03:58 -08:00 committed by GitHub
parent ae022cc0c9
commit ebf3bdd909
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 29 additions and 5 deletions

View File

@ -53,11 +53,25 @@ The request body takes the following properties:
* `query`: SQL query string.
* `resultFormat`: String that indicates the format to return query results. Select one of the following formats:
* `object`: Returns a JSON array of JSON objects with the HTTP response header `Content-Type: application/json`.
* `array`: Returns a JSON array of JSON arrays with the HTTP response header `Content-Type: application/json`.
* `objectLines`: Returns newline-delimited JSON objects with a trailing blank line. Returns the HTTP response header `Content-Type: text/plain`.
* `arrayLines`: Returns newline-delimited JSON arrays with a trailing blank line. Returns the HTTP response header `Content-Type: text/plain`.
* `csv`: Returns a comma-separated values with one row per line and a trailing blank line. Returns the HTTP response header `Content-Type: text/csv`.
* `object`: Returns a JSON array of JSON objects with the HTTP response header `Content-Type: application/json`.
Object field names match the columns returned by the SQL query in the same order as the SQL query.
* `array`: Returns a JSON array of JSON arrays with the HTTP response header `Content-Type: application/json`.
Each inner array has elements matching the columns returned by the SQL query, in order.
* `objectLines`: Returns newline-delimited JSON objects with the HTTP response header `Content-Type: text/plain`.
Newline separation facilitates parsing the entire response set as a stream if you don't have a streaming JSON parser.
This format includes a single trailing newline character so you can detect a truncated response.
* `arrayLines`: Returns newline-delimited JSON arrays with the HTTP response header `Content-Type: text/plain`.
Newline separation facilitates parsing the entire response set as a stream if you don't have a streaming JSON parser.
This format includes a single trailing newline character so you can detect a truncated response.
* `csv`: Returns comma-separated values with one row per line. Sent with the HTTP response header `Content-Type: text/csv`.
Druid uses double quotes to escape individual field values. For example, a value with a comma returns `"A,B"`.
If the field value contains a double quote character, Druid escapes it with a second double quote character.
For example, `foo"bar` becomes `foo""bar`.
This format includes a single trailing newline character so you can detect a truncated response.
* `header`: Boolean value that determines whether to return information on column names. When set to `true`, Druid returns the column names as the first row of the results. To also get information on the column types, set `typesHeader` or `sqlTypesHeader` to `true`. For a comparative overview of data formats and configurations for the header, see the [Query output format](#query-output-format) table.
@ -124,6 +138,16 @@ The request body takes the following properties:
</TabItem>
</Tabs>
#### Client-side error handling and truncated responses
Druid reports errors that occur before the response body is sent as JSON with an HTTP 500 status code. The errors are reported using the same format as [native Druid query errors](../querying/querying.md#query-errors).
If an error occurs while Druid is sending the response body, the server handling the request stops the response midstream and logs an error.
This means that when you call the SQL API, you must properly handle response truncation.
For `object` and `array` formats, truncated responses are invalid JSON.
For line-oriented formats, Druid includes a newline character as the final character of every complete response. Absence of a final newline character indicates a truncated response.
If you detect a truncated response, treat it as an error.
---