apache/druid · error · UnsupportedOperationException

Parque does not support nested tree extraction

Error message

Parque does not support nested tree extraction

What it means

Capability sentinel in ParquetGroupFlattenerMaker.makeJsonTreeExtractor: nested multi-node tree extraction (more than one path node) is not supported for parquet Group records; only single root-field access is implemented, so deeper nested tree expressions are rejected.

Solutions

  1. Use a JsonPath-based flattenSpec expression instead of a nested tree expression.
  2. Access the root field only, or preprocess data to flatten the nested structure at ingestion.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at extensions-core/parquet-extensions/src/main/java/org/apache/druid/data/input/parquet/simple/ParquetGroupFlattenerMaker.java:105 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07). Data as JSON: /api/errors/775c79a223473962. Report an issue: GitHub.

Appendix: source

Thrown at extensions-core/parquet-extensions/src/main/java/org/apache/druid/data/input/parquet/simple/ParquetGroupFlattenerMaker.java:105

      return finalizeConversion(val);
    };
  }

  @Nullable
  @Override
  public Function<Group, Object> makeJsonQueryExtractor(String expr)
  {
    throw new UnsupportedOperationException("Parquet does not support JQ");
  }

  @Override
  public Function<Group, Object> makeJsonTreeExtractor(List<String> nodes)
  {
    if (nodes.size() == 1) {
      return (Group group) -> getRootField(group, nodes.get(0));
    }

    throw new UnsupportedOperationException("Parque does not support nested tree extraction");
  }

  @Override
  public JsonProvider getJsonProvider()
  {
    return parquetJsonProvider;
  }

  @Override
  public Object finalizeConversionForMap(Object o)
  {
    return finalizeConversion(o);
  }

  /**
   * {@link ParquetGroupConverter} lazily/non-recursively translates {@link Group} into plain java objects, which means
   * garbage that downstream druid cannot understand can be left behind in list and map types, so we deal with it here.
   */

View on GitHub (pinned to 9b90983fd2)