{"record":{"id":"d89f7ab247e717f5","repo":"apache/iceberg","slug":"unsupported-spark-view-dependency-type","errorCode":null,"errorMessage":"Unsupported Spark view dependency type: ","messagePattern":"Unsupported Spark view dependency type: ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"spark/v4.2/spark/src/main/java/org/apache/iceberg/spark/source/SparkViewDependenciesParser.java","lineNumber":100,"sourceCode":"    } catch (IOException e) {\n      throw new UncheckedIOException(\"Failed to parse Spark view dependencies\", e);\n    }\n\n    Preconditions.checkArgument(\n        node.isArray(), \"Cannot parse Spark view dependencies from non-array: %s\", node);\n    ImmutableList.Builder<Dependency> dependenciesBuilder = ImmutableList.builder();\n    for (JsonNode dependency : node) {\n      String type = string(TYPE, dependency);\n      String[] nameParts = stringArray(NAME_PARTS, dependency);\n      switch (type) {\n        case TABLE:\n          dependenciesBuilder.add(Dependency.table(nameParts));\n          break;\n        case FUNCTION:\n          dependenciesBuilder.add(Dependency.function(nameParts));\n          break;\n        default:\n          throw new IllegalArgumentException(\"Unsupported Spark view dependency type: \" + type);\n      }\n    }\n\n    return DependencyList.of(dependenciesBuilder.build().toArray(new Dependency[0]));\n  }\n\n  private static String string(String property, JsonNode node) {\n    JsonNode value = node.get(property);\n    Preconditions.checkArgument(\n        value != null && value.isTextual(),\n        \"Cannot parse Spark view dependency string: %s: %s\",\n        property,\n        value);\n    return value.asText();\n  }\n\n  private static String[] stringArray(String property, JsonNode node) {\n    JsonNode values = node.get(property);","sourceCodeStart":82,"sourceCodeEnd":118,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/spark/v4.2/spark/src/main/java/org/apache/iceberg/spark/source/SparkViewDependenciesParser.java#L82-L118","documentation":"SparkViewDependenciesParser.fromJson() validates each dependency node's 'type' field against TABLE and FUNCTION. An unrecognized type string throws IllegalArgumentException('Unsupported Spark view dependency type: ' + type), guarding forward-compat for dependency kinds written by newer versions.","triggerScenarios":"Reading a view written by a newer Iceberg/Spark version that serialized a dependency type this connector doesn't know, or metadata with a typo'd/unknown type value.","commonSituations":"Downgrade scenarios (view created with newer connector, read with older); hand-edited metadata changing the type field; third-party tools writing custom dependency types.","solutions":["Upgrade the Iceberg Spark runtime to match the version that wrote the view","Correct the type field in metadata to 'table' or 'function' if hand-edited","Recreate the view with only table/function dependencies","Check the type value in the error message and compare against the connector's supported set"],"exampleFix":"// before\n{\"type\":\"model\",\"name-parts\":[\"db\",\"m\"]}\n// after\n{\"type\":\"table\",\"name-parts\":[\"db\",\"t\"]}","handlingStrategy":"validation","validationCode":"for (JsonNode d : depsArray) { String type = d.get(\"type\").asText(); if (!type.equals(\"table\") && !type.equals(\"function\")) throw new IllegalArgumentException(\"Unknown dependency type: \" + type); }","typeGuard":"boolean knownType(String type) { return \"table\".equals(type) || \"function\".equals(type); }","tryCatchPattern":"try { deps = SparkViewDependenciesParser.fromJson(json); } catch (IllegalArgumentException e) { log.warn(\"Unknown dependency type from newer writer: {}\", e.getMessage()); throw e; }","preventionTips":["Keep reader and writer connector versions aligned","Don't edit the 'type' field manually","Only 'table' and 'function' types are interoperable"],"tags":["spark","iceberg","views","json","enum"],"backgroundTag":"unsupported-enum-value","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}