{"record":{"id":"9f807425d0be0782","repo":"apache/iceberg","slug":"transform-is-not-supported-transform-9f8074","errorCode":null,"errorMessage":"Transform is not supported: ${transform}","messagePattern":"Transform is not supported: (.+?)","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"spark/v4.1/spark/src/main/java/org/apache/iceberg/spark/Spark3Util.java","lineNumber":430,"sourceCode":"        case \"hour\":\n        case \"hours\":\n          return org.apache.iceberg.expressions.Expressions.hour(colName);\n        case \"truncate\":\n          return org.apache.iceberg.expressions.Expressions.truncate(colName, findWidth(transform));\n        case \"zorder\":\n          return new Zorder(\n              Stream.of(transform.references())\n                  .map(ref -> DOT.join(ref.fieldNames()))\n                  .map(org.apache.iceberg.expressions.Expressions::ref)\n                  .collect(Collectors.toList()));\n        case \"hilbert\":\n          return new Hilbert(\n              Stream.of(transform.references())\n                  .map(ref -> DOT.join(ref.fieldNames()))\n                  .map(org.apache.iceberg.expressions.Expressions::ref)\n                  .collect(Collectors.toList()));\n        default:\n          throw new UnsupportedOperationException(\"Transform is not supported: \" + transform);\n      }\n\n    } else if (expr instanceof NamedReference) {\n      NamedReference ref = (NamedReference) expr;\n      return org.apache.iceberg.expressions.Expressions.ref(DOT.join(ref.fieldNames()));\n\n    } else {\n      throw new UnsupportedOperationException(\"Cannot convert unknown expression: \" + expr);\n    }\n  }\n\n  /**\n   * Converts Spark transforms into a {@link PartitionSpec}.\n   *\n   * @param schema the table schema\n   * @param partitioning Spark Transforms\n   * @return a PartitionSpec\n   */","sourceCodeStart":412,"sourceCodeEnd":448,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/spark/v4.1/spark/src/main/java/org/apache/iceberg/spark/Spark3Util.java#L412-L448","documentation":"Thrown by Spark3Util.toIcebergTerm when a Spark Transform in a sort/order expression is not one of the supported kinds (identity, bucket, truncate, years/months/days/hours, etc.). The Spark transform cannot be translated to an Iceberg expression term such as Hilbert or sort expressions.","triggerScenarios":"CREATE TABLE ... ORDER BY / SORT BY clauses, or catalog code converting Spark sort expressions, containing transforms like 'random' or engine-specific transforms Iceberg has no mapping for.","commonSituations":"Engine-specific transforms (e.g. custom partition transforms) leaking into Iceberg DDL; version mismatch where Spark added a new built-in transform the Iceberg version predates.","solutions":["Rewrite the ordering clause using supported transforms (identity, bucket, truncate, temporal)","Upgrade Iceberg to pick up mappings for newer Spark transforms","Remove unsupported transforms from the DDL and apply equivalent logic at write time"],"exampleFix":"// before\nCREATE TABLE t (...) USING iceberg ORDER BY (rand());\n// after\nCREATE TABLE t (...) USING iceberg ORDER BY (id);","handlingStrategy":"validation","validationCode":"Set<String> supported = Set.of(\"identity\",\"bucket\",\"truncate\",\"years\",\"months\",\"days\",\"hours\");\nif (expr instanceof Transform && !supported.contains(((Transform<?>) expr).name())) {\n  throw new IllegalArgumentException(\"Unsupported transform in ORDER BY: \" + ((Transform<?>) expr).name());\n}","typeGuard":null,"tryCatchPattern":"try {\n  term = Spark3Util.toIcebergTerm(expr);\n} catch (UnsupportedOperationException e) {\n  if (e.getMessage().startsWith(\"Transform is not supported\")) {\n    // rewrite the order-by clause with supported transforms\n  }\n}","preventionTips":["Restrict generated DDL to supported transform names","Pin compatible Spark/Iceberg version pairs","Validate transform names before building sort clauses"],"tags":["spark","transforms","sort-order"],"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"}