Expose Arrow `Struct` columns as JDBC `STRUCT` metadata in the Flight SQL JDBC driver.

Offen Anfängerfreundlich
#1,100 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
76/100
Issue-Typ
Feature
Klarheit
Klar beschrieben
Aktivitätsstatus
Ruhig
Tech-Stack
java
Bereich
database

Rechercherichtung

Beginnen Sie in flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/utils/SqlTypes.java, wo ArrowType.Struct Types.JAVA_OBJECT zugeordnet wird, und prüfen Sie die zugehörige Implementierung von ArrowFlightJdbcStructVectorAccessor.java. Aktualisieren Sie die Metadatenzuordnung, sodass Struct-Spalten JDBC STRUCT melden, und überprüfen Sie, dass ResultSetMetaData für diese Spalten STRUCT und "STRUCT" zurückgibt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Type: enhancement
Describe the enhancement requested

Please expose Arrow Struct columns as JDBC STRUCT metadata in the Flight SQL JDBC driver.

Today, Arrow Struct is mapped to java.sql.Types.JAVA_OBJECT, which makes
ResultSetMetaData report:

  • getColumnType(...) == Types.JAVA_OBJECT
  • getColumnTypeName(...) == "JAVA_OBJECT"

This hides the fact that the column is structurally a JDBC STRUCT, even though the driver
already has struct-specific accessor support.

Why this matters

JDBC clients often rely on ResultSetMetaData to understand result schemas before reading
rows. When STRUCT columns are reported as JAVA_OBJECT, clients cannot distinguish:

  • struct/object-like columns
  • generic opaque objects

This makes schema inspection, BI tooling, ORM adapters, and generic JDBC consumers harder.

Current upstream evidence

In
flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/utils/SqlTypes.java:

  • ArrowType.Struct maps to Types.JAVA_OBJECT

In flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/accessor/impl/comple x/ArrowFlightJdbcStructVectorAccessor.java:

  • getStruct() is already implemented
  • but getObjectClass() returns Map.class
  • getObject() returns a Map

So the data path knows about structs, but metadata does not expose them as JDBC STRUCT.

Expected behavior

For Arrow Struct columns:

  • ResultSetMetaData.getColumnType(...) should return java.sql.Types.STRUCT
  • ResultSetMetaData.getColumnTypeName(...) should return STRUCT

Optionally, getObject() / object-class behavior could also be aligned with JDBC Struct, but
the most important gap is metadata.

Actual behavior

Arrow Struct columns are exposed as:

  • Types.JAVA_OBJECT
  • "JAVA_OBJECT"

Version

Observed with:

  • Arrow Flight SQL JDBC driver 18.2.0

Confirmed in current upstream code and latest published artifact line:

  • 19.0.0
Vorherrschende Sprache
Java
Sterne
95
Forks
154
Ø Merge
2 T. 16 Std.
Gemergte PRs (30 T.)
9

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus apache/arrow-java

Alle Issues in apache/arrow-java

Ähnliche Issues

Weitere Issues zu Java

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.