{"record":{"id":"e1510763744a6b28","repo":"apache/beam","slug":"data-type-sqltypename-not-supported-yet","errorCode":null,"errorMessage":"Data type: ${sqlTypeName} not supported yet!","messagePattern":"Data type: (.+?) not supported yet!","errorType":"exception","errorClass":"java.lang.UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/rel/BeamSortRel.java","lineNumber":400,"sourceCode":"        } else if (!isValue1Null && isValue2Null) {\n          fieldRet = 1 * (nullsFirst.get(i) ? -1 : 1);\n        } else {\n          switch (sqlTypeName) {\n            case TINYINT:\n            case SMALLINT:\n            case INTEGER:\n            case BIGINT:\n            case FLOAT:\n            case DOUBLE:\n            case VARCHAR:\n            case DATE:\n            case TIMESTAMP:\n              Comparable v1 = row1.getBaseValue(fieldIndex, Comparable.class);\n              Comparable v2 = row2.getBaseValue(fieldIndex, Comparable.class);\n              fieldRet = v1.compareTo(v2);\n              break;\n            default:\n              throw new UnsupportedOperationException(\n                  \"Data type: \" + sqlTypeName + \" not supported yet!\");\n          }\n        }\n\n        fieldRet *= (orientation.get(i) ? 1 : -1);\n\n        if (fieldRet != 0) {\n          return fieldRet;\n        }\n      }\n      return 0;\n    }\n  }\n\n  private static class ReversedBeamSqlRowComparator implements Comparator<Row>, Serializable {\n    private final BeamSqlRowComparator comparator;\n\n    public ReversedBeamSqlRowComparator(","sourceCodeStart":382,"sourceCodeEnd":418,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/rel/BeamSortRel.java#L382-L418","documentation":"BeamSortRel's row comparator supports only a fixed set of Calcite SQL types for comparison (e.g. numeric types, TIMESTAMP). When the ORDER BY (or comparison) involves a field whose sqlTypeName is not in the supported switch, the default branch throws this UnsupportedOperationException.","triggerScenarios":"ORDER BY (or BeamSortRel.compare) over a column whose Calcite type is not handled by the switch — commonly ARRAY/MAP/STRUCT/ROW, BINARY/VARBINARY, BOOLEAN or OTHER types in the sort key.","commonSituations":"Sorting by a complex-typed column (struct, array, map) parsed from JSON/Avro/Parquet sources, or ordering by a boolean/bytes column in BeamSql.","solutions":["Order by a scalar column instead (e.g. extract a primitive field: ORDER BY struct_field.inner_field).","Cast the column to a supported comparable type in the SQL query (e.g. CAST(bool_col AS TINYINT)).","Pre-compute a comparable sort key (e.g. stringify bytes or hash of the complex value) in a prior transform and order by that.","Add a case for the needed SqlTypeName in BeamSortRel's comparator if modifying the library is an option."],"exampleFix":"-- before\nSELECT * FROM t ORDER BY nested_struct\n-- after\nSELECT * FROM t ORDER BY nested_struct.some_timestamp","handlingStrategy":"type-guard","validationCode":"Set<SqlTypeName> sortable = EnumSet.of(DECIMAL, TINYINT, SMALLINT, INTEGER, BIGINT, FLOAT, DOUBLE, TIMESTAMP, DATE, TIME, VARCHAR, CHAR); if (!sortable.contains(fieldType.getSqlTypeName())) { throw new IllegalArgumentException(\"Cannot ORDER BY field of type \" + fieldType.getSqlTypeName()); }","typeGuard":"boolean isSortableType = sortableTypes.contains(orderByField.getType().getSqlTypeName());","tryCatchPattern":"try { sorted = pc.apply(SqlTransform.query(\"SELECT * FROM t ORDER BY \" + col)); } catch (UnsupportedOperationException e) { if (e.getMessage().startsWith(\"Data type:\")) { /* cast column or pick a scalar sort key */ } else { throw e; } }","preventionTips":["Order by primitive scalar columns only","Cast complex columns to comparable types before ordering","Extract a sort key from STRUCT/ARRAY fields in a prior transform","Check the row Schema field types before generating ORDER BY SQL"],"tags":["sql","order-by","data-type","unsupported"],"backgroundTag":"unsupported-dtype","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}