apache / apache/datafusion

Invalid parquet writer options (e.g. `max_row_group_size = 0`, `bloom_filter_fpp = 1.5`) panic in `COPY` instead of returning an error

Aperta
#24,904 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.