in streampipes-rest/src/main/java/org/apache/streampipes/rest/impl/datalake/DataLakeResource.java [278:357]
public ResponseEntity<StreamingResponseBody> downloadData(
@Parameter(in = ParameterIn.PATH, description = "the id of the measurement series", required = true)
@PathVariable("measurementID") String measurementID
, @Parameter(in = ParameterIn.QUERY, description = "the columns to be selected (comma-separated)")
@RequestParam(value = QP_COLUMNS, required = false) String columns
, @Parameter(in = ParameterIn.QUERY, description = "start date for slicing operation")
@RequestParam(value = QP_START_DATE, required = false) Long startDate
, @Parameter(in = ParameterIn.QUERY, description = "end date for slicing operation")
@RequestParam(value = QP_END_DATE, required = false) Long endDate
, @Parameter(in = ParameterIn.QUERY, description = "page number for paging operation")
@RequestParam(value = QP_PAGE, required = false) Integer page
, @Parameter(in = ParameterIn.QUERY, description = "maximum number of retrieved query results")
@RequestParam(value = QP_LIMIT, required = false) Integer limit
, @Parameter(in = ParameterIn.QUERY, description = "offset")
@RequestParam(value = QP_OFFSET, required = false) Integer offset
, @Parameter(in = ParameterIn.QUERY, description = "grouping tags (comma-separated) for grouping operation")
@RequestParam(value = QP_GROUP_BY, required = false) String groupBy
,
@Parameter(
in = ParameterIn.QUERY,
description = "ordering of retrieved query results (ASC or DESC - default is ASC)")
@RequestParam(value = QP_ORDER, required = false) String order
, @Parameter(in = ParameterIn.QUERY, description = "name of aggregation function used for grouping operation")
@RequestParam(value = QP_AGGREGATION_FUNCTION, required = false) String aggregationFunction
,
@Parameter(
in = ParameterIn.QUERY,
description = "time interval for aggregation (e.g. 1m - one minute) for grouping operation")
@RequestParam(value = QP_TIME_INTERVAL, required = false) String timeInterval
,
@Parameter(
in = ParameterIn.QUERY,
description = "format specification (csv, json - default is csv) for data download")
@RequestParam(value = QP_FORMAT, required = false) String format
, @Parameter(in = ParameterIn.QUERY, description = "csv delimiter (comma or semicolon)")
@RequestParam(value = QP_CSV_DELIMITER, required = false) String csvDelimiter
, @Parameter(in = ParameterIn.QUERY, description = "missingValueBehaviour (ignore or empty)")
@RequestParam(value = QP_MISSING_VALUE_BEHAVIOUR, required = false) String missingValueBehaviour
,
@Parameter(
in = ParameterIn.QUERY,
description = "filter conditions (a comma-separated list of filter conditions"
+ "such as [field,operator,condition])")
@RequestParam(value = QP_FILTER, required = false) String filter,
@Parameter(in = ParameterIn.QUERY, description = "Excel export with template")
@RequestParam(value = QP_XLSX_USE_TEMPLATE, required = false) boolean useTemplate
, @Parameter(in = ParameterIn.QUERY, description = "ID of the excel template file to use")
@RequestParam(value = QP_XLSX_TEMPLATE_ID, required = false) String templateId
, @Parameter(in = ParameterIn.QUERY, description = "The first row in the excel file where data should be written")
@RequestParam(value = QP_XLSX_START_ROW, required = false) Integer startRow,
@Parameter(in = ParameterIn.QUERY, description = "Use either label or key as the column header")
@RequestParam(value = QP_HEADER_COLUMN_NAME, required = false) String headerColumnName,
@RequestParam Map<String, String> queryParams) {
if (!(checkProvidedQueryParams(queryParams))) {
throw new SpMessageException(HttpStatus.BAD_REQUEST, Notifications.error("Wrong query parameters provided"));
} else {
ProvidedRestQueryParams sanitizedParams = populate(measurementID, queryParams);
if (format == null) {
format = "csv";
}
var outputFormat = OutputFormat.fromString(format);
StreamingResponseBody streamingOutput = output -> dataExplorerQueryManagement.getDataAsStream(
sanitizedParams,
outputFormat,
isIgnoreMissingValues(missingValueBehaviour),
output);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment",
"datalake." + outputFormat.toString().toLowerCase());
return ResponseEntity.ok()
.headers(headers)
.body(streamingOutput);
}
}