{"record":{"id":"41958608700dfebe","repo":"apache/druid","slug":"orc-flattener-does-not-support-jq","errorCode":null,"errorMessage":"ORC flattener does not support JQ","messagePattern":"ORC flattener does not support JQ","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"extensions-core/orc-extensions/src/main/java/org/apache/druid/data/input/orc/OrcStructFlattenerMaker.java","lineNumber":100,"sourceCode":"  {\n    return toPlainJavaType(converter.convertRootField(obj, key));\n  }\n\n  @Override\n  public Function<OrcStruct, Object> makeJsonPathExtractor(String expr)\n  {\n    final JsonPath jsonPath = JsonPath.compile(expr);\n    return record -> {\n      Object val = jsonPath.read(record, jsonPathConfiguration);\n      return finalizeConversion(val);\n    };\n  }\n\n  @Nullable\n  @Override\n  public Function<OrcStruct, Object> makeJsonQueryExtractor(String expr)\n  {\n    throw new UnsupportedOperationException(\"ORC flattener does not support JQ\");\n  }\n\n  @Override\n  public Function<OrcStruct, Object> makeJsonTreeExtractor(List<String> nodes)\n  {\n    if (nodes.size() == 1) {\n      return (OrcStruct record) -> getRootField(record, nodes.get(0));\n    }\n\n    throw new UnsupportedOperationException(\"ORC flattener does not support nested root queries\");\n  }\n\n  @Override\n  public JsonProvider getJsonProvider()\n  {\n    return orcJsonProvider;\n  }\n","sourceCodeStart":82,"sourceCodeEnd":118,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/extensions-core/orc-extensions/src/main/java/org/apache/druid/data/input/orc/OrcStructFlattenerMaker.java#L82-L118","documentation":"OrcStructFlattenerMaker.makeJsonQueryExtractor() is unimplemented: the ORC input format does not support JQ (JSON query) expressions in flatten specs. Calling it raises UnsupportedOperationException by design.","triggerScenarios":"Configuring an ORC inputFormat with a flattenSpec that uses a jq-type flatten expression.","commonSituations":"Copying a JSON flattenSpec (using jq expressions) over to ORC data; someone attempts advanced JQ path extraction while ingesting ORC files.","solutions":["Replace jq flatten expressions with 'path' or 'root' type expressions in the ORC flattenSpec","Use the JSON parser/JQ support only for data formats that implement makeJsonQueryExtractor (e.g. JSON input)","Pre-convert or extract needed fields before ORC ingestion if complex extraction is required"],"exampleFix":"// before\n{\"type\":\"jq\",\"expr\":\".a[0].b\"}\n// after\n{\"type\":\"path\",\"expr\":\"$.a\"}","handlingStrategy":"validation","validationCode":"final List<FlattenSpecFieldSpec> jqFields = flattenSpec.getFields().stream().filter(f -> \"jq\".equals(f.getType())).collect(Collectors.toList());\nif (!jqFields.isEmpty()) { throw new IllegalArgumentException(\"jq flatten expressions are not supported for ORC input\"); }","typeGuard":"boolean supportsJq(StableFlattenSpecMaker maker) { try { maker.makeJsonQueryExtractor(\".\"); return true; } catch (UnsupportedOperationException e) { return false; } }","tryCatchPattern":"try { extractor = flattenerMaker.makeJsonQueryExtractor(expr); } catch (UnsupportedOperationException e) { extractor = usePathExtractorInstead(); }","preventionTips":["Validate ingestionspec JSON against format capabilities before submitting tasks","Use only 'path'/'root' flatten expressions with ORC","Document format-specific flatten support in team ingestion templates"],"tags":["orc","flatten-spec","unsupported-operation","ingestion"],"backgroundTag":"unsupported-operation","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}