I’m pushing a graphql schema to dgraph using xid fields on types that map to the xid dgraph predicate. When I run live loader with upsertPredicate ‘xid’ however, subsequent imports result in duplicate records being created.
What version of Dgraph are you using?
Dgraph Version
$ dgraph version
Dgraph version : v21.03.2
Dgraph codename : rocket-2
Dgraph SHA-256 : 00a53ef6d874e376d5a53740341be9b822ef1721a4980e6e2fcb60986b3abfbf
Commit SHA-1 : b17395d33
Commit timestamp : 2021-08-26 01:11:38 -0700
Branch : HEAD
Go version : go1.16.2
jemalloc enabled : true
Have you tried reproducing the issue with the latest release?
Yes
What is the hardware spec (RAM, OS)?
MacOS / Docker / 16GB (8GB allocated)
Steps to reproduce the issue (command/config used to run Dgraph).
This is the schema I’m pushing to my dgraph instance: index.graphqls (2.2 KB)
This is the JSON file I’m live loading. out.json (98.7 KB)
This is the command I’m using: dgraph live --files /path_to/out.json --upsertPredicate "xid"
Expected behaviour and actual result.
Buildings with the same xid value should not be duplicated, but they are.
Duplicate (or rename it) the XID value in the dataset to the key “uid”. In fact, you don’t need the XID field during the live load. This field is necessary for the dataset already in the DB only. For the case you are loading new data, you have to use UID instead of XID.
The upsert feature in live load takes UID in the dataset into consideration instead of XID. And when it loads it, it creates the XID field to compare with the new data during the live load.
BTW, the UID key have to be a blank node. It will throw an error if you don’t prefix it with _: