dgraph-io/dgraph · error
expected key but found %v
Error message
expected key but found %v
What it means
Error raised by the RDF parser in chunker/rdf_parser.go when a facet key (predicate) is expected but the token found is not a valid key; the offending value is reported via %v. Fix by providing a valid facet predicate name.
Source
Thrown at chunker/rdf_parser.go:273
}
return s, nil
}
func parseFacetsRDF(it *lex.ItemIterator, rnq *api.NQuad) error {
if !it.Next() {
return errors.New("unexpected end of facets")
}
item := it.Item()
if item.Typ != itemLeftRound {
return fmt.Errorf("expected '(' but found %v at facet", item.Val)
}
for it.Next() { // parse one key value pair
// parse key
item = it.Item()
if item.Typ != itemText {
return fmt.Errorf("expected key but found %v", item.Val)
}
facetKey := strings.TrimSpace(item.Val)
if len(facetKey) == 0 {
return errors.New("empty facetKeys not allowed")
}
// parse =
if !it.Next() {
return errors.New("unexpected end of facets")
}
item = it.Item()
if item.Typ != itemEqual {
return fmt.Errorf("expected = after facetKey. Found %v", item.Val)
}
// parse value or empty value
if !it.Next() {
return errors.New("unexpected end of facets")
}
item = it.Item()View on GitHub (pinned to 759e242be6)
Solutions
- Ensure each facet pair starts with a bare text key: (score=0.9).
- Remove quotes around facet keys.
- Reorder pairs so the key precedes '='.
Example fix
// before "<s> <p> \"v\" (=0.9) ." // after "<s> <p> \"v\" (score=0.9) ."
Defensive patterns
Strategy: validation
Validate before calling
func facetPairOK(pair string) bool {
parts := strings.SplitN(pair, "=", 2)
return len(parts) == 2 && strings.TrimSpace(parts[0]) != ""
} Try / catch
if _, err := ParseRDF(line); err != nil {
if strings.Contains(err.Error(), "expected key but found") {
return fmt.Errorf("each facet needs a bare text key before '=': %w", err)
}
return err
} Prevention
- Emit facets strictly as key=value pairs.
- Never quote facet keys in RDF facet syntax.
- Validate facet pairs with a key=value regex before parsing.
When it happens
Trigger: ParseRDF input where the first token inside the facet parens is not a text key, e.g. '(=0.9)' with a missing key, or '("score"=0.9)' where quotes produce a different token type.
Common situations: Facet pairs written value-first; keys quoted when they should be bare text; commas or operators mis-tokenized as keys.
Related errors
- unexpected end of facets
- expected '(' but found %v at facet
- empty facetKeys not allowed
- NQuad failed sanity check. Subject: %q, Predicate: %q, Objec
- expected '(', found: %s
AI-assisted analysis of dgraph-io/dgraph@759e242be6 (2026-09-01).
Data as JSON: /api/errors/60be02055a7b56d5.
Report an issue: GitHub.