apache / apache/datafusion

Support timestamp formats on CsvReadOptions or Schema

Aperta
#17,548 1 commento 3 reazioni 0 assegnatari Vedi su GitHub
enhancement
Lingua principale
Rust
Stelle
9.3k
Fork
2.4k
Merge medio
3g 11h
PR unite (30g)
362

Descrizione

### Is your feature request related to a problem or challenge?

In Apache Spark it is possible to define what the expected timestamp format will be.

See `timestampFormat` and `timestampNTZFormat ` [csv options](https://spark.apache.org/docs/latest/sql-data-sources-csv.html)

This works for both user supplied and inferred schemas.

In datafusion similar functionality is only available when parsing CSV via [SQL DDL options](https://datafusion.apache.org/user-guide/sql/format_options.html)

Currently with datafusion that is not possible even for user supplied schemas. Parsing a CSV that has timestamps with non standard formats will result in an error. Example
CSV contains a column `created_at` with the following value `2025-06-23-05.07.34.214000`

Schema definition for the timestamp column:
```
Field::new("created_at", DataType::Timestamp(TimeUnit::Microsecond, None), true),
```
Attempting to parse CSV file
```
Error: ArrowError(ParseError("Error parsing column 11 at line 1: Parser error: Error parsing timestamp from '2025-06-23-05.07.34.214000': invalid timestamp separator"), None)
```

### Describe the solution you'd like

Users should be able to supply a [custom timestamp format](https://docs.rs/chrono/0.4.42/chrono/format/strftime/index.html#specifiers)

### Describe alternatives you've considered

Extend `CsvReadOptions` and allow users to supply a custom timestamp format. This would be similar to the Apache Spark approach. This format would be used to parse timestamps during schema inference or with user supplied schemas.

And, optionally, extend `DataType::Timestamp` to include a user defined timestamp. This would be more flexible as it would allow per column timestamp formats.

### Additional context

- Currenty the only workaround is to define non custom timetamps as being strings and convert them afterwards with extra code.
- It is possible to supply a timestamp format already when parsing with [SQL DDL](https://datafusion.apache.org/user-guide/sql/format_options.html)

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia da CsvReadOptions e dal percorso di parsing dei timestamp CSV, quindi confronta le opzioni di formato SQL DDL esistenti. Determina come un formato personalizzato dovrebbe essere applicato all’inferenza dello schema e agli schemi forniti dall’utente, incluso se DataType::Timestamp richiede modifiche; il lavoro è completato quando i valori di timestamp non standard vengono analizzati correttamente attraverso entrambi i percorsi.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
rust
Ambito
data-engineering
Tipo di issue
Funzionalità
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.