[Feature] Resolve primary-key full-text index options and validate schemas
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 35/100
Direzione di ricerca
Start with src/paimon/core/index/pk/primary_key_index_definitions.cpp:208-211 and src/paimon/core/schema/schema_validation.cpp:565-570, then read docs/source/user_guide/primary_key_global_index.rst. Use the listed Java validation and option-resolution tests as behavioral references. Done means full-text options are preserved, all listed validation and cross-family checks run independently, documentation is corrected, and corresponding tests cover the specified cases.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Search before asking
- I searched in the issues and found nothing similar.
Motivation
Sub-issue of #399 (step 5: primary-key full-text index, options and validation).
Paimon C++ recognizes pk-full-text.index.columns, but two parts are missing:
- Options are dropped.
PrimaryKeyIndexDefinitions::Createbuilds theFULL_TEXTdefinition with an empty options map (src/paimon/core/index/pk/primary_key_index_definitions.cpp:208-211). Tokenizer options such asfull-text.tokenizer=jiebanever reach the index. - Validation is skipped.
SchemaValidation::ValidatePrimaryKeyBTreeIndexesreturns early whenpk-btree.index.columnsis empty (src/paimon/core/schema/schema_validation.cpp:565-570). A table that sets onlypk-full-text.index.columnstherefore gets none of the checks: column existence, column type, cross-family ownership, deletion vectors, bucket mode.docs/source/user_guide/primary_key_global_index.rstsays vector and full-text definitions "are recognized for validation", which is only true when BTree columns are also set.
Java behavior (apache/paimon#8651, apache/paimon#8672, apache/paimon#8922):
Option merging (CoreOptions#primaryKeyFullTextIndexOptions(column)):
- Start from the table options whose key starts with
full-text.. - Parse
fields.<column>.pk-full-text.index.optionsas a JSON object of string values. Reject:- anything that is not a JSON object:
<key> must be a JSON object of option key-value pairs. - an empty key:
<key> contains an empty option key. - a null value:
<key> value for key <k> must not be null.
- anything that is not a JSON object:
- Qualify keys that lack the
full-text.prefix. - Reject a key already set at table level with a different value:
<key> defines conflicting values for full-text.<k>.An equal value is accepted.
For example, {"full-text.tokenizer":"jieba","ngram.min-gram":"2"} resolves to full-text.tokenizer=jieba and full-text.ngram.min-gram=2. The full-text indexer later strips the prefix (see #400).
Schema validation (SchemaValidation#validatePrimaryKeyFullTextIndex, run when the key is present):
- Exactly one column:
pk-full-text.index.columns must contain exactly one column in the first release, but is [...]. - The column is not blank.
- The table is a primary-key table.
deletion-vectors.enabled = true, unless the merge engine isfirst-row.deletion-vectors.merge-on-read = falsewhen deletion vectors are enabled.- Fixed or postpone bucket mode:
bucket > 0orbucket = -2. - No
pk-clustering-override. - The column exists.
- The column type is
CHAR/VARCHAR/STRING. - The resolved options are valid, as in the merging rules above.
Cross-family checks apply to every primary-key index family:
- no duplicate column within one family key;
- a column can own at most one primary-key index across all families.
The maintainer factory also allows only one FULL_TEXT definition: Only one primary-key full-text index is supported.
Solution
- Resolve the full-text options for each
FULL_TEXTdefinition fromfields.<column>.pk-full-text.index.optionsand the table-levelfull-text.*options, using the rules above. - Validate primary-key index columns independently of whether BTree columns are set. Add the full-text rules and the cross-family checks.
- Fix the statement in
primary_key_global_index.rst. - Add tests aligned with Java
PrimaryKeyFullTextIndexValidationTestandPrimaryKeyIndexDefinitionsTest#testResolvesFullTextIndexOptions:- more than one column, a duplicate column, a blank column, an unknown column, an
INTcolumn - deletion vectors off, and
first-rowwith deletion vectors off - merge-on-read on
bucket = -1rejected,bucket = -2acceptedpk-clustering-override- the column already used by
pk-btree - malformed JSON
- a conflicting
tokenizer - an append table
- more than one column, a duplicate column, a blank column, an unknown column, an
Anything else?
- Java also rejects renaming, dropping, or changing the type of a primary-key index column during schema evolution (
SchemaManagerUtils#assertNotUpdatingPrimaryKeyIndexColumn). Paimon C++ has no schema-evolution API yet, so this can be added together with one. - This issue unblocks #409 and #410.
Are you willing to submit a PR?
- I'm willing to submit a PR!
- Lingua principale
- C++
- Stelle
- 65
- Fork
- 31
- Merge medio
- 1g 14h
- PR unite (30g)
- 60
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un 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/paimon-cpp
-
[Feature] Warm up next data file in ConcatBatchReaderForse già presa @SteNicholas l’ha presa 1 giorno fa. Apertaenhancement
apache/paimon-cpp#419 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
[Feature] Derive Parquet data file stats from in-memory writer metadata instead of re-reading footerForse già presa @SteNicholas l’ha presa 1 giorno fa. Apertaenhancement
apache/paimon-cpp#417 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
[Feature] Support writing MAP<K, BLOB> fieldsForse già presa @SteNicholas l’ha presa 3 giorni fa. Apertaenhancement
apache/paimon-cpp#415 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
apache/paimon-cpp#410 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
apache/paimon-cpp#409 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di apache/paimon-cpp
Issue simili
-
Make Catch2 optional when `RDK_BUILD_CPP_TESTS=OFF`Forse già presa @pechersky l’ha presa oggi. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 2 giorni
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
dice-group/dice-hash#111 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
MerginMaps/mobile#4741 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
ros-perception/image_pipeline#1198 ·