apache/druid · critical · ISE
set to 'true', but has been removed, see for details for…
Error message
%s set to 'true', but has been removed, see %s for details for how to migrate to SQL compliant behavior
What it means
The legacy null-handling toggle druid.query.defaultNullValue has been removed from Druid. StartupInjectorBuilder.validate() refuses startup with an ISE if the property is still set to 'true', directing users to the ANSI SQL null-handling migration doc for the version in use.
Solutions
- Remove the property (set only valid values or delete the line) from runtime properties
- Follow the migration guide at the docs link in the error (release-info/migr-ansi-sql-null) to adapt queries to SQL-compliant NULL behavior
- Test queries that relied on the old default-null substitution behavior and adjust them (e.g. COALESCE) before/after upgrading
Example fix
// before (runtime.properties) druid.query.defaultNullValue=true // after # property removed entirely
Defensive patterns
Strategy: validation
Validate before calling
String v = props.getProperty("druid.query.defaultNullValue");
if ("true".equalsIgnoreCase(v)) throw new IllegalStateException("Removed config druid.query.defaultNullValue=true; migrate per druid.apache.org docs"); Try / catch
try { injector = StartupInjectorBuilder.build(); } catch (ISE e) { if (e.getMessage().contains("has been removed")) log.error("Remove legacy null-handling config; see migration doc"); throw e; } Prevention
- Diff runtime.properties against the new version's docs on every upgrade
- Delete properties named in 'removed' warnings instead of 'fixing' their values
- Read the release-info/migr-ansi-sql-null guide before upgrading across the ANSI-SQL null-handling boundary
When it happens
Trigger: validate() parses properties.getProperty(NULL_HANDLING_CONFIG_STRING, "false") during injector startup; any occurrence of the removed key set to 'true' in runtime properties triggers the throw.
Common situations: Upgrading Druid from a pre-ANSI-SQL version to a recent one while keeping old common.runtime.properties; copied config templates that still carry the removed flag.
Related errors
- set to 'false', but has been removed, see for details for…
- At least one of the druid.enablePlaintextPort or…
- Cannot return double for Null Value
- Cannot return long for Null Value
- Cannot return primitive float for Null Value
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/16128a0c2d3b2148.
Report an issue: GitHub.
Appendix: source
Thrown at processing/src/main/java/org/apache/druid/guice/StartupInjectorBuilder.java:142
*/
private static final class PropertiesValidator
{
private final Properties properties;
@Inject
public PropertiesValidator(Properties properties)
{
this.properties = properties;
}
public void validate()
{
final boolean defaultValueMode = Boolean.parseBoolean(
properties.getProperty(NULL_HANDLING_CONFIG_STRING, "false")
);
if (defaultValueMode) {
final String docsLink = StringUtils.format("https://druid.apache.org/docs/%s/release-info/migr-ansi-sql-null", getVersionString());
throw new ISE(
"%s set to 'true', but has been removed, see %s for details for how to migrate to SQL compliant behavior",
NULL_HANDLING_CONFIG_STRING,
docsLink
);
}
final boolean no3vl = !Boolean.parseBoolean(
properties.getProperty(THREE_VALUE_LOGIC_CONFIG_STRING, "true")
);
if (no3vl) {
final String docsLink = StringUtils.format("https://druid.apache.org/docs/%s/release-info/migr-ansi-sql-null", getVersionString());
throw new ISE(
"%s set to 'false', but has been removed, see %s for details for how to migrate to SQL compliant behavior",
THREE_VALUE_LOGIC_CONFIG_STRING,
docsLink
);
}
View on GitHub (pinned to 9b90983fd2)