使用 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 |