美文网首页
Nosql-neo4j-Cypher 语句 (6)

Nosql-neo4j-Cypher 语句 (6)

作者: Viterbi | 来源:发表于2022-09-21 09:03 被阅读0次

    目录: [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
    
    

    本文使用 文章同步助手 同步

    相关文章

      网友评论

          本文标题:Nosql-neo4j-Cypher 语句 (6)

          本文链接:https://www.haomeiwen.com/subject/nlbdortx.html