apache / apache/parquet-java

Bulk skip in RunLengthBitPackingHybridDecoder / DictionaryValuesReader

Offen
#3,772 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Type: enhancement
Vorherrschende Sprache
Java
Sterne
3.1k
Forks
1.6k
Ø Merge
3 T. 12 Std.
Gemergte PRs (30 T.)
33

Beschreibung

### Motivation

Make Hive leverage bulk skip when implementing probe decode for Parquet, similarly to https://issues.apache.org/jira/browse/HIVE-22731, which was about ORC.

### Problem

`ValuesReader.skip(int n)` ships with a naive default:

```java
public void skip(int n) {
for (int i = 0; i < n; i++) skip();
}
```

For dictionary-encoded columns (the common case), each `skip()` bottoms
out in `RunLengthBitPackingHybridDecoder.readInt()` — a mode switch,
array-index arithmetic, and a value the caller immediately discards.

Any filter-then-skip path (column-index row ranges, hash-join probe
filtering, runtime filters) pays this cost per skipped row.

### Proposal

1. Add `RunLengthBitPackingHybridDecoder.skipInts(int n)` — re-use
`readNext()` per run, then advance `currentCount` by
`min(n, currentCount)` instead of walking every value through
`readInt()`.
2. Override `skip(int)` on `DictionaryValuesReader` and
`RunLengthBitPackingHybridValuesReader` to call `decoder.skipInts(n)`.

### Component(s)

Core

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Beginne mit dem Lesen von RunLengthBitPackingHybridDecoder.readInt() und readNext(), und untersuche anschließend skip(int) in DictionaryValuesReader und RunLengthBitPackingHybridValuesReader. Bestätige, wie dictionary-kodierte Werte dekodiert werden, und identifiziere die relevanten vorhandenen Tests oder Test-Einstiegspunkte. Erledigt ist die Aufgabe, wenn das Bulk-Skipping in allen drei Readern den Decoder-Pfad verwendet und dabei die Anzahl der übersprungenen Werte beibehält.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
java
Bereich
data
Issue-Typ
Feature
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Aktiv
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
72/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.