jiangxt2 opened a new issue, #12104:
URL: https://github.com/apache/gravitino/issues/12104

   ### Describe what's wrong
   
   When loading a JDBC catalog table through the Spark connector, if any column 
is mapped to `Types.ExternalType` in Gravitino metadata, `loadTable()` throws 
`UnsupportedOperationException` and the entire table becomes unusable.
   
   Root cause: `SparkTypeConverter.toSparkType()` handles ~20 Gravitino native 
types but does not have a branch for `Types.ExternalType`. Any column with this 
type falls through to the final `throw` statement.
   
   The problem affects all JDBC catalogs where `toGravitino()` produces 
`ExternalType` for database-specific types:
   
   | Catalog | Types producing ExternalType |
   |---------|------------------------------|
   | ClickHouse | IPv4, IPv6, Date32, DateTime64, Decimal(>38), LowCardinality, 
Map, Tuple, Array, JSON, Enum, Variant, Geo, Nested, Dynamic, AggregateFunction 
|
   | Doris | LARGEINT, BITMAP, HLL, JSON, Variant, IPV4, IPV6 |
   | PostgreSQL | interval, custom types, and unknown-type catch-all |
   | MySQL | TINYTEXT, MEDIUMTEXT, YEAR, ENUM, SET, JSON, GEOMETRY and other 
types |
   | OceanBase | Unknown-type catch-all |
   | Hologres | Unknown-type catch-all |
   | Glue (via Hive connector) | Unknown Hive types |
   
   The Glue catalog uses `SparkHiveTypeConverter` which also delegates unknown 
types to the base class `SparkTypeConverter.toSparkType()`, triggering the same 
crash.
   
   ### Error message and/or stacktrace
   
   ```
   java.lang.UnsupportedOperationException: Not support ExternalType: IPv4
       at 
org.apache.gravitino.spark.connector.SparkTypeConverter.toSparkType(SparkTypeConverter.java:196)
       at 
org.apache.gravitino.spark.connector.jdbc.SparkJdbcTypeConverter.toSparkType(SparkJdbcTypeConverter.java:39)
       at 
org.apache.gravitino.spark.connector.utils.GravitinoTableInfoHelper.getSchema(GravitinoTableInfoHelper.java:89)
   ```
   
   ### How to reproduce
   
   1. Register a ClickHouse catalog in Gravitino with a table containing an 
`IPv4` column:
      ```sql
      CREATE TABLE test.ipv4_table (id Int32, ip IPv4) ENGINE = MergeTree ORDER 
BY id;
      ```
   
   2. Load the table through the Spark connector:
      ```sql
      SELECT * FROM clickhouse_catalog.test.ipv4_table;
      ```
   
   3. Result: `UnsupportedOperationException` — the entire table is 
inaccessible.
   
   ### Proposed fix
   
   Add an `ExternalType → DataTypes.StringType` mapping in 
`SparkTypeConverter.toSparkType()` before the final `throw`. This follows the 
existing pattern used for `UUID` (also mapped to `StringType` because Spark has 
no native UUID type). Placing the fix in the base class automatically covers 
all subclasses (JDBC, Hive, and Glue connectors across all Spark versions 
3.3/3.4/3.5).
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to