Invalid parquet writer options (e.g. `max_row_group_size = 0`, `bloom_filter_fpp = 1.5`) panic in `COPY` instead of returning an error
- Lingua principale
- Rust
- Stelle
- 9.3k
- Fork
- 2.4k
- Merge medio
- 3g 11h
- PR unite (30g)
- 360
Descrizione
### Describe the bug
`ParquetOptions::into_writer_properties_builder` (`datafusion/common/src/file_options/parquet_writer.rs`) passes the session options straight to the `parquet` crate's `WriterPropertiesBuilder`. Several of its setters `assert!` on values they cannot accept, so an invalid `SET` turns the next parquet write into a panic (or a hang) instead of a configuration error.
### To Reproduce
```sql
SET datafusion.execution.parquet.max_row_group_size = 0;
COPY (SELECT 1) TO 'x.parquet';
```
```text
thread 'main' panicked at parquet-59.2.0/src/file/properties.rs:756:9:
assertion `left != right` failed: Cannot have a 0 max row group row count
```
```sql
SET datafusion.execution.parquet.bloom_filter_fpp = 1.5; -- also 0, 1, -1, NaN
COPY (SELECT 1) TO 'x.parquet';
```
```text
thread 'main' panicked at parquet-59.2.0/src/file/properties.rs:1665:13:
bloom filter fpp must be between 0 and 1 (exclusive) ...
```
```sql
SET datafusion.execution.parquet.write_batch_size = 0;
COPY (SELECT 1) TO 'x.parquet'; -- never returns
```
The same applies to `column_index_truncate_length = 0`, `statistics_truncate_length = 0`, a per-column `bloom_filter_fpp`, and `content_defined_chunking.min_chunk_size = 0` / `max_chunk_size <= min_chunk_size`.
### Expected behavior
A configuration error naming the option, like the existing handling of an unknown `compression` or `encoding` string in the same function.
### Additional context
Found while running a corpus of extreme configuration values against a debug build of `datafusion-cli`.
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia in datafusion/common/src/file_options/parquet_writer.rs, in ParquetOptions::into_writer_properties_builder, quindi esegui le riproduzioni SET e COPY elencate in datafusion-cli. Convalida le opzioni interessate prima che i parquet writer setters possano causare un panic o un hang, restituendo un errore di configurazione specifico per l’opzione, come nella gestione esistente di compression e encoding. Il lavoro è completato quando ogni valore non valido restituisce un errore invece di causare un panic o bloccarsi.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- rust
- Ambito
- data-engineering
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Attiva
- Chiarezza
- Specificata chiaramente
- Idoneità per principianti
- 72/100