Parquet: StringReader decodes every occurrence of a dictionary value into a new String
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 76/100
- Tipo di issue
- Refactoring
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- java
- Ambito
- data, performance
Direzione di ricerca
Partire da ParquetValueReaders.StringReader e seguire il modo in cui BaseDeleteLoader.readPosDeletes fornisce valori di file_path codificati tramite dizionario. Aggiungere il test unitario e il benchmark JMH descritti nella proposta, quindi verificare che i valori di dizionario ripetuti riutilizzino il risultato decodificato e che il caricamento delle eliminazioni per posizione mostri il miglioramento previsto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
ParquetValueReaders.StringReader decodes every value with column.nextBinary().toStringUsingUTF8(). When a page is dictionary-encoded, Parquet's dictionary reader hands back the same Binary instance for every occurrence of a dictionary entry. The reader still decodes each of them into a new String.
This shows up when position deletes are loaded. BaseDeleteLoader.readPosDeletes reads a whole position delete file through the generic reader. file_path is dictionary-encoded and, since the spec sorts position deletes by file_path, it repeats for thousands of rows in a row. We profiled a Spark 4.1 MERGE INTO over a v2 table with position and equality deletes (8 executors, JFR on all of them). Loading the position deletes was 10.5 % of the target-scan stage, even with #17864 applied. Inside that load, StringReader.read for file_path was 22.9 % of the samples.
Proposal
In StringReader, keep the last Binary read and its String, and return that String while the next value is the same instance. Values are unchanged. A PR with a unit test and a JMH benchmark (loading a whole position delete file through BaseDeleteLoader: 143.3 ms on main, 113.1 ms with the change) follows.
Related: #17864, #16440, #16052.
- Lingua principale
- Java
- Stelle
- 9.3k
- Fork
- 3.6k
- Merge medio
- 2g 20h
- PR unite (30g)
- 143
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di apache/iceberg
-
Parquet TIME_MILLIS statistics are not converted to microsecondsForse già presa @chenjian2664 l’ha presa 1 giorno fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Temporal transforms put pre-epoch timestamps at `.999999` into the previous unitForse già presa @gitedmond l’ha presa 9 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
apache/iceberg#18371 · 1 commento · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
OpenAPI: Remove deprecated TrueExpression and FalseExpressionForse già presa @zhang-arvin l’ha presa 4 giorni fa. Apertaimprovement
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
apache/iceberg#18351 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
RCK tests fail to bind port 8181 when run alongside the kafka-connect integration stackForse già presa @Kurtiscwright l’ha presa 21 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
I maintainer di solito rispondono entro 1 giorno
-
Core: SchemaParser rejects integral JSON numbers for floating-point defaultsForse già presa @laserninja l’ha presa 29 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di apache/iceberg
Issue simili
-
:ml/Transform >bug Team:ML
Difficoltà 2/5 Mezza giornata Idoneità per principianti 64/100
elastic/elasticsearch#161960 · 2 commenti · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
I maintainer di solito rispondono entro 4 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
objectionary/lints#1556 ·
I maintainer di solito rispondono entro 3 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
wildfly/wildfly-launcher#99 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
apache/rocketmq#11427 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno