apache/druid · error · IllegalArgumentException
Cannot load data from location
Error message
Cannot load data from location [%s]. Data pulling from [%s] not supported
What it means
Even when a finder exists for the URI scheme, cache generation requires a finder that implements URIDataPuller (i.e. actually supports pulling data). If the resolved finder cannot pull, generateCache() throws this IAE saying pulling from that scheme is not supported.
Solutions
- Use a URI scheme whose finder implements URIDataPuller (file, http, s3 with the lookups extension).
- If you implemented a custom finder, make it implement URIDataPuller or use it only for version detection.
- Check extension versions — an outdated extension may provide a non-pulling finder.
Example fix
// before
final URI uri = URI.create("custom://bucket/data"); // finder lacks URIDataPuller
// after
final URI uri = URI.create("https://bucket/data"); // supported puller Defensive patterns
Strategy: type-guard
Validate before calling
SearchableVersionedDataFinder<URI> finder = pullers.get(URI.create(uri).getScheme()); boolean canPull = finder instanceof URIDataPuller;
Type guard
boolean supportsPulling(Object finder) { return finder instanceof URIDataPuller; } Try / catch
try { scheduler.schedule(uriNamespace); } catch (IllegalArgumentException e) { if (e.getMessage().contains("Data pulling from")) { /* switch to a pulling scheme/extension */ } else { throw e; } } Prevention
- Use schemes whose finders implement URIDataPuller
- Verify custom finders implement URIDataPuller before registering them
When it happens
Trigger: generateCache() casting the scheme-resolved SearchableVersionedDataFinder to URIDataPuller when the instance does not implement it — a finder registered for the scheme that is read-only/version-inspecting only.
Common situations: Custom or third-party URI finder registered for the scheme without URIDataPuller support; misconfiguration where a non-pulling finder shadows the expected one; using static-lookup mode with a URI that requires pulling.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- Cannot get map view
- Cannot retrieve map view from lookup
- No field names available
- Reverse lookup not allowed.
- Unknown loader type[ ]. Known types are
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/cd642adb6c8dfd4c.
Report an issue: GitHub.
Appendix: source
Thrown at extensions-core/lookups-cached-global/src/main/java/org/apache/druid/server/lookup/namespace/UriCacheGenerator.java:86
public String generateCache(
final UriExtractionNamespace extractionNamespace,
final CacheScheduler.EntryImpl<UriExtractionNamespace> entryId,
@Nullable final String lastVersion,
final CacheHandler cache
) throws Exception
{
final boolean doSearch = extractionNamespace.getUriPrefix() != null;
final URI originalUri = doSearch ? extractionNamespace.getUriPrefix() : extractionNamespace.getUri();
final SearchableVersionedDataFinder<URI> pullerRaw = pullers.get(originalUri.getScheme());
if (pullerRaw == null) {
throw new IAE(
"Unknown loader type[%s]. Known types are %s",
originalUri.getScheme(),
pullers.keySet()
);
}
if (!(pullerRaw instanceof URIDataPuller)) {
throw new IAE(
"Cannot load data from location [%s]. Data pulling from [%s] not supported",
originalUri,
originalUri.getScheme()
);
}
final URIDataPuller puller = (URIDataPuller) pullerRaw;
final URI uri;
if (doSearch) {
final Pattern versionRegex;
if (extractionNamespace.getFileRegex() != null) {
versionRegex = Pattern.compile(extractionNamespace.getFileRegex());
} else {
versionRegex = null;
}
uri = pullerRaw.getLatestVersion(
extractionNamespace.getUriPrefix(),
versionRegexView on GitHub (pinned to 9b90983fd2)