目录: [TOC]
CALL {} (subquery)
- 执行子查询并返回结果
- 子查询必须有RETURN
- 子查询可以使用范围内变量
- 子查询不能返回与范围内相同的变量
- 子查询返回可以在整个访问范围使用
- Neo4j 4.0后查支持子查询
//使用WITH导入外层变量
// 子查询的WITH只能使用简单的
// WITH要在子查询第一行,如果第一行是USE,可以在第二行
UNWIND [0, 1, 2] AS x
CALL {
WITH x
RETURN x * 10 AS y
}
RETURN x, y
//子查询使用聚合函数
MATCH (p:Person)
CALL {
WITH p
MATCH (other:Person) WHERE other.age < p.age
RETURN count(other) AS youngerPersonsCount
}
RETURN p.name, youngerPersonsCount
CALL procedure
调用存储过程
每一个存储过程都需要输入参数
大部分存储过程返回一定数量的结果流,YIELD
可以明确指定需要返回的变量,每一个返回 变量都可以起别名;
YIELD
和WHERE结合可以对结果进行过滤; neo4j支持空的存储过程,
//调用一个内置的存储过程,查看database中所有的标签
CALL db.labels
//查看存储过程的特征,指定返回变量
CALL dbms.procedures() YIELD name, signature
WHERE name='dbms.listConfig'
RETURN signature
//带参数的存储过程
CALL dbms.security.createUser('johnsmith', 'h6u4%kr', FALSE )
//使用存储过程的默认参数
CALL dbms.security.createUser('johnsmith', 'h6u4%kr')
//查询标签的数量
CALL db.labels() YIELD label
RETURN count(label) AS numLabels
//过滤返回的结果
CALL db.labels() YIELD label
WHERE label CONTAINS 'User'
RETURN count(label) AS numLabels
//重命名返回的变量名
CALL db.propertyKeys() YIELD propertyKey AS prop
MATCH (n)
WHERE n[prop] IS NOT NULL RETURN prop, count(n) AS numNodes
UNION
- 合并多个查询结果
- 列名和列数要相同才能UNION
- 保持所有结果使用UNION ALL,UNION会对结果去重
MATCH (n:Actor)
RETURN n.name AS name
UNION ALL MATCH (n:Movie)
RETURN n.title AS name
USE
- 指定那个graph将被查询
//语法
USE <graph>
<other clauses>
//例子
USE exampleFabricSetup.exampleDatabaseName
MATCH (n) RETURN n
LOAD CSV
- 用于导入csv文件
- FROM后面接着csv的文件路径,用AS指定给变量
- 可以从HTTPS、HTTP、FTP导入CSV
- 支持
gzip and Deflate
,其本地文件支持ZIP压缩 - 不支持重定向
- 经常和
PERIODIC COMMIT
一起使用,提交大量的数据,默认为1000rows提交一次,
加载路径配置
配置文件:
-
dbms.security.allow_csv_import_from_file_urls
,允许使用file:///
加载文件,默认为TURE -
dbms.directories.import
本地导入的路径,指定本地导入的root目录,默认为安装目录下import
- 如果要导入本地文件
file:///myfile.csv
,如果dbms.directories.import
是默认import,则neo4j从<NEO4J_HOME>/import/myfile.csv
中加载数据;
CSV文件格式
- UTF-8格式
- 行尾是\r或者\r\n
- 默认分隔符是逗号,可以指定其他分隔符,使用
FIELDTERMINATOR
指定其他分隔符 - CSV中的引号是被允许的,neo4j在读的时候会忽略掉
- 字符串使用双引号
-
dbms.import.csv.legacy_quote_escaping
这个开启,则支持转移字符
//使用LOAD CSV导入数据
artists.csv.
1,ABBA,1992
2,Roxette,1986
3,Europe,1979
4,The Cardigans,1992
LOAD CSV FROM 'https://neo4j.com/docs/cypher-manual/4.1/csv/artists.csv' AS line
CREATE (:Artist { name: line[1], year: toInteger(line[2])})
//使用LOAD CSV导入带表头的数据
artists-with-headers.csv. Id,Name,Year
1,ABBA,1992
2,Roxette,1986
3,Europe,1979
4,The Cardigans,1992
LOAD CSV WITH HEADERS FROM 'https://neo4j.com/docs/cypher-manual/4.1/csv/artists-with-headers.csv' AS line
CREATE (:Artist { name: line.Name, year: toInteger(line.Year)})
//使用LOAD CSV导入,指定分隔符
artists-fieldterminator.csv. 1;ABBA;1992
2;Roxette;1986
3;Europe;1979
4;The Cardigans;1992
LOAD CSV FROM 'https://neo4j.com/docs/cypher-manual/4.1/csv/artists-fieldterminator.csv' AS line FIELDTERMINATOR ';'
CREATE (:Artist { name: line[1], year: toInteger(line[2])})
//使用LOAD CSV导入大批量数据,默认为1000行提交一次
USING PERIODIC COMMIT
LOAD CSV FROM 'https://neo4j.com/docs/cypher-manual/4.1/csv/artists.csv' AS line
CREATE (:Artist { name: line[1], year: toInteger(line[2])})
//指定提交的行数
USING PERIODIC COMMIT 500
LOAD CSV FROM 'https://neo4j.com/docs/cypher-manual/4.1/csv/artists.csv' AS line
CREATE (:Artist { name: line[1], year: toInteger(line[2])})
//zhuanyi字符
artists-with-escaped-char.csv.
"1","The ""Symbol""","1992"
LOAD CSV FROM 'https://neo4j.com/docs/cypher-manual/4.1/csv/artists-with-escaped-char.csv' AS line
CREATE (a:Artist { name: line[1], year: toInteger(line[2])})
RETURN a.name AS name, a.year AS year, size(a.name) AS size
//获取导入数据的行数linenumber()
LOAD CSV FROM 'https://neo4j.com/docs/cypher-manual/4.1/csv/artists.csv' AS line
RETURN linenumber() AS number, line
//获取导入文件的绝对路径
LOAD CSV FROM 'https://neo4j.com/docs/cypher-manual/4.1/csv/artists.csv' AS line
RETURN DISTINCT file() AS path
本文使用 文章同步助手 同步
网友评论