通过 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 子句。尝试这样做会导致执行错误。
一种可能的变通方法是将 SKIP 和 LIMIT 放在 RETURN 子句之前。例如,以下查询会失败
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 | 脚本 |
|---|---|
1 |
foo |
2 |
foo |