apache / apache/datafusion

Use Arrow Extension Types Instead of Type Variation Hacks

Aperta
#19,944 0 commenti 1 reazione 0 assegnatari Vedi su GitHub
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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.