Open DrPyser opened 4 years ago
Hi @DrPyser, I agree, we should improve our error reporting,
Would you mind letting us know what does a
stands for in:
graph.add_node(redisgraph.Node(label="account", properties=a))
I would like to see the actual query which was issued, one way of finding out is to have redis-cli
running with the MONITOR
command and then run your python script. you should see all of the commands received by your redis-server in the monitor.
for a in accounts:
print("a=",a)
if a["mcc"] == "True":
a.update(mcc=True)
if a["mcc"] == "False":
a.update(mcc=False)
if a["parent_id"] == "<null>":
a.update(parent_id=None)
graph.add_node(redisgraph.Node(label="account", properties=a))
Basically, I'm loading data from a csv and creating "account" entities. Some attributes will be null.
An extract from the actual cypher query:
"GRAPH.QUERY" "accounts" "CREATE (hpebuobbzn:account{account_id:\"310-095-8250\",name:\"Fondation Mira\",parent_id:None,mcc:False})
I guess it should be converting the None
to a null
, right?
Hi @DrPyser,
null
is a somewhat tricky beast in Cypher, and RedisGraph is not totally consistent in this respect.
The main problem is that null
is not actually allowed by Cypher to be the value of a property, though both the bulk loader and the CREATE
clause will allow null values to be set (which is an error on our part).
When you perform property accesses on non-existent properties, null
is returned, which sets up the more orthodox approach here. By not setting parent_id
at all where it's currently null
, you can write queries such as:
MATCH (a:account) WHERE a.parent_id IS NULL RETURN a
MATCH (a:account) WHERE a.parent_id IS NOT NULL RETURN a
MATCH (a:account) WHERE exists(a.parent_id) RETURN a
Okay, I got it. Thanks!
Hi!
I'm getting this error while trying to create a bunch of nodes, pretty basic stuff. The error was a bit cryptic for me, and I didn't find anything googling it, documentation-wise or similar question answered. Well, except the redisgraph code:
https://github.com/RedisGraph/RedisGraph/blob/0cf50df86d5846c1eba39b2c0fcf1f500c25abf2/src/arithmetic/arithmetic_expression.c#L327-L348
My guess is that this is a datatype mapping issue(
None
values are not automatically translated to cypherNULL
). If so, what is the right way to encode a null value in a record?I think it would be helpful to users to have some error interpretation between the raw redisgraph protocol messages and the client library user.
Thanks!