使用 Cypher 查询读取数据
此页面中的所有示例都假设 |
如果您需要更多灵活性,可以使用query
选项运行自定义 Cypher® 查询。
查询**必须**包含RETURN
子句。对于存储过程,您需要在RETURN
之前包含YIELD
子句。
query
选项示例val query = """
MATCH (n:Person)
WITH n
LIMIT 2
RETURN id(n) AS id, n.name AS name
"""
spark.read.format("org.neo4j.spark.DataSource")
.option("query", query)
.load()
.show()
id | name |
---|---|
0 |
John Doe |
1 |
Jane Doe |
DataFrame 列
结果 DataFrame 的结构由查询本身定义。有关更多详细信息,请参阅模式推断页面。
当您返回单个属性而不是图实体(节点、关系、路径)时,此选项最适合。无论如何,返回图实体不会导致错误。
推荐 | 不推荐 |
---|---|
MATCH (p:Person) RETURN id(p) AS id, p.name AS name |
MATCH (p:Person) RETURN p |
如果您需要返回图实体,请改用 |
限制结果
连接器在内部使用SKIP
和LIMIT
来支持分区读取;因此,在自定义 Cypher 查询中不允许使用SKIP
和LIMIT
子句。尝试这样做会导致执行错误。
一种可能的解决方法是在RETURN
子句之前使用SKIP
和LIMIT
。例如,以下查询失败
MATCH (p:Person)
RETURN p.name AS name
ORDER BY name
LIMIT 10
可以使用RETURN
之前的LIMIT
重写查询以成功完成
MATCH (p:Person)
WITH p.name AS name
ORDER BY name
LIMIT 10
RETURN p.name
重写查询时,请确保新查询与原始查询等效,以便结果相同。 |
您还可以使用query.count
选项而不是重写查询。有关更多详细信息,请参阅Spark 优化页面。
script
选项
script
选项允许在执行读取操作之前运行一系列 Cypher 查询。
script
的结果可用于后续的query
,例如注入查询参数。
script
和query
示例val script = "RETURN 'foo' AS val"
val query = """
UNWIND range(1, 2) as id
RETURN id AS val, scriptResult[0].val AS script
"""
spark.read.format("org.neo4j.spark.DataSource")
.option("script", script)
.option("query", query)
.load()
.show()
val | script |
---|---|
1 |
foo |
2 |
foo |