prestodb/presto · error · PrestoException

PROMETHEUS_UNKNOWN_ERROR

PROMETHEUS_UNKNOWN_ERROR

Error message

split URI invalid: ${e.getMessage()}

What it means

Catch in getSplits' split construction: building the split URI from the generated time chunk and table metadata failed (malformed URI, illegal characters), and the error is re-raised with the underlying message embedded. Fires when the composed Prometheus query URL is invalid.

Source

Thrown at presto-prometheus/src/main/java/com/facebook/presto/plugin/prometheus/PrometheusSplitManager.java:202

        PrometheusTableHandle tableHandle = layoutHandle.getTableHandle();
        PrometheusTable table = prometheusClient.getTable(tableHandle.getSchemaName(), tableHandle.getTableName());

        // this can happen if table is removed during a query
        if (table == null) {
            throw new TableNotFoundException(tableHandle.toSchemaTableName());
        }
        List<ConnectorSplit> splits = generateTimesForSplits(prometheusClock.now(), maxQueryRangeDuration, queryChunkSizeDuration, tableHandle)
                .stream()
                .map(time -> {
                    try {
                        return new PrometheusSplit(buildQuery(
                                prometheusURI,
                                time,
                                table.getName(),
                                queryChunkSizeDuration));
                    }
                    catch (URISyntaxException e) {
                        throw new PrestoException(PROMETHEUS_UNKNOWN_ERROR, "split URI invalid: " + e.getMessage());
                    }
                }).collect(Collectors.toList());
        return new FixedSplitSource(splits);
    }

    private static class EffectiveLimits
    {
        private final Instant upperBound;
        private final java.time.Duration maxQueryRangeDuration;

        /**
         * If no upper bound is specified by the predicate, we use the time now() as the defaultUpperBound
         * if predicate LOWER bound is set AND predicate UPPER bound is set:
         * max duration          = upper bound - lower bound
         * effective upper bound = predicate upper bound
         * if predicate LOWER bound is NOT set AND predicate UPPER bound is set:
         * max duration          = config max duration
         * effective upper bound = predicate upper bound

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Inspect the embedded cause message for the bad URI component
  2. Check table/metric names for characters needing URL encoding
  3. Verify prometheus.uri and time parameters are well-formed
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at presto-prometheus/src/main/java/com/facebook/presto/plugin/prometheus/PrometheusSplitManager.java:202 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04). Data as JSON: /api/errors/898df78941ed8b3f. Report an issue: GitHub.