Use Arrow Extension Types Instead of Type Variation Hacks
- Lingua principale
- Rust
- Stelle
- 9.3k
- Fork
- 2.4k
- Merge medio
- 3g 11h
- PR unite (30g)
- 360
Descrizione
DataFusion encodes Arrow-specific types (like unsigned integers) by misusing [`type_variation_reference`](https://github.com/apache/datafusion/blob/e6fc5160312481f7df8da3d69321350f81238e78/datafusion/substrait/src/logical_plan/producer/types.rs#L68-L77). This violates Substrait's [technology principle](https://substrait.io/spec/technology_principles/) to avoid specialization for a single producer.
Per the [spec](https://substrait.io/types/type_variations/), `type_variation_reference` is for physical variations of the same type where "all variations are expected to have the same semantics." Signed and unsigned integers have different semantics.
Types affected:
- UInt8/16/32/64
- LargeUtf8/LargeBinary/LargeList
- Decimal256
- Duration
- Date64
- Time32
- Time64
## Solution
Use Arrow's official [extension_types.yaml](https://github.com/apache/arrow/blob/main/format/substrait/extension_types.yaml) which already defines these types (u8, u16, large_string, decimal256, etc.).
**Before:**
```
Type::I8 { type_variation_reference: 1 } // means UInt8
```
**After:**
```
extension_uris: [{ uri: ".../extension_types.yaml" }]
Type::UserDefined { name: "u8" }
```
The consumer already handles extension types, so backwards compatibility can be maintained.
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia da datafusion/substrait/src/logical_plan/producer/types.rs, in particolare dalla gestione di type-variation collegata nell'issue, e confronta i tipi Arrow interessati con Apache Arrow's extension_types.yaml. Traccia quindi la gestione esistente dei tipi di estensione nel consumer e verifica come sono rappresentati gli URI delle estensioni. Il lavoro è completato quando tutti i tipi elencati utilizzano le estensioni ufficiali, preservando al contempo il comportamento di retrocompatibilità indicato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- rust
- Ambito
- data-engineering
- Tipo di issue
- Refactoring
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 42/100