|| apoc.meta.schema - APOC 核心文档 - Neo4j 文档

apoc.meta.schema

此过程不被认为可在多个线程中安全运行。因此,并行运行时不支持此过程。欲了解更多信息,请参阅 Cypher 手册 → 并行运行时

详情

语法

apoc.meta.schema([ config ]) :: (值)

描述

检查给定的子图并以 MAP 形式返回元数据。

输入参数

名称

类型

描述

config

MAP

要采样的节点数量,将 sample 设置为 -1 将移除采样; { sample = 1000 :: INTEGER } 默认值为:{}

返回参数

名称

类型

描述

MAP

表示为 map 的元信息。

配置参数

此过程支持以下配置参数

配置参数
名称 类型 默认值 描述

sample

INTEGER

1000

要采样的节点数量。将 sample 设置为 -1 将移除采样。

采样

指定 sample 参数(默认为 1000)以分析数据的子集。

采样以及每个标签的节点计数用于计算跳过值。由于此值是使用随机数生成器生成的,因此通过采样方法获得的结果在后续运行中可能会有所不同。

示例 1. 计算数据采样的跳过计数

如果数据库包含 500 个带有 Foo 标签的节点,则该标签的跳过计数计算如下

每个节点标签的跳过计数是通过在 (totalNodesForLabel / sample) ± 0.1 之间生成一个随机数来确定的。

采样 10:skipCount = 500 / 10 = 50
最终的跳过计数将在 45 到 55 之间。

采样 50:skipCount = 500 / 50 = 10
最终的跳过计数将在 9 到 11 之间。

采样 100:skipCount = 500 / 100 = 5
最终的跳过计数将为 5。

跳过计数表示在检查一个节点之前跳过的节点数量。例如,如果跳过计数为 5,则每 5 个节点检查一个。因此,更高的采样数会导致更多的节点被采样。

要停止采样,请设置 sample: -1

使用示例

本节中的示例基于以下示例图

CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
CREATE (TomH:Person {name:'Tom Hanks', born:1956})

CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
CREATE (TheMatrixReloaded:Movie {title:'The Matrix Reloaded', released:2003, tagline:'Free your mind'})
CREATE (TheMatrixRevolutions:Movie {title:'The Matrix Revolutions', released:2003, tagline:'Everything that has a beginning has an end'})
CREATE (SomethingsGottaGive:Movie {title:"Something's Gotta Give", released:2003})
CREATE (TheDevilsAdvocate:Movie {title:"The Devil's Advocate", released:1997, tagline:'Evil has its winning ways'})

CREATE (YouveGotMail:Movie {title:"You've Got Mail", released:1998, tagline:'At odds in life... in love on-line.'})
CREATE (SleeplessInSeattle:Movie {title:'Sleepless in Seattle', released:1993, tagline:'What if someone you never met, someone you never saw, someone you never knew was the only someone for you?'})
CREATE (ThatThingYouDo:Movie {title:'That Thing You Do', released:1996, tagline:'In every life there comes a time when that thing you dream becomes that thing you do'})
CREATE (CloudAtlas:Movie {title:'Cloud Atlas', released:2012, tagline:'Everything is connected'})

CREATE (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix)
CREATE (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrixReloaded)
CREATE (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrixRevolutions)
CREATE (Keanu)-[:ACTED_IN {roles:['Julian Mercer']}]->(SomethingsGottaGive)
CREATE (Keanu)-[:ACTED_IN {roles:['Kevin Lomax']}]->(TheDevilsAdvocate)

CREATE (TomH)-[:ACTED_IN {roles:['Joe Fox']}]->(YouveGotMail)
CREATE (TomH)-[:ACTED_IN {roles:['Sam Baldwin']}]->(SleeplessInSeattle)
CREATE (TomH)-[:ACTED_IN {roles:['Mr. White']}]->(ThatThingYouDo)
CREATE (TomH)-[:ACTED_IN {roles:['Zachry', 'Dr. Henry Goose', 'Isaac Sachs', 'Dermot Hoggins']}]->(CloudAtlas)

CREATE (s0:sameName{id:1}) -[r0:sameName {alfa: 'beta'}] -> (t0:sameName{id:2});
CALL apoc.meta.schema()
YIELD value
UNWIND keys(value) AS key
RETURN key, value[key] AS value;

请注意,如果关系类型和节点标签同名,则关系将通过后缀 " (RELATIONSHIP)" 进行区分

结果
key

"Movie"

{count: 9, relationships: {ACTED_IN: {count: 41, properties: {roles: {existence: FALSE, type: "LIST", array: TRUE}}, direction: "in", labels: ["Person"]}}, type: "node", properties: {tagline: {existence: FALSE, type: "STRING", indexed: FALSE, unique: FALSE}, title: {existence: FALSE, type: "STRING", indexed: FALSE, unique: FALSE}, released: {existence: FALSE, type: "INTEGER", indexed: FALSE, unique: FALSE}}, labels: []}

"ACTED_IN"

{count: 9, type: "relationship", properties: {roles: {existence: FALSE, type: "LIST", array: TRUE}}}

"Person"

{count: 2, relationships: {ACTED_IN: {count: 9, properties: {roles: {existence: FALSE, type: "LIST", array: TRUE}}, direction: "out", labels: ["Movie"]}}, type: "node", properties: {name: {existence: FALSE, type: "STRING", indexed: FALSE, unique: FALSE}, born: {existence: FALSE, type: "INTEGER", indexed: FALSE, unique: FALSE}}, labels: []}

"sameName (RELATIONSHIP)"

{"count":1,"type":"relationship","properties":{"alfa":{"existence":false,"type":"STRING","array":false}}}

"sameName"

{count: 2, relationships: {"sameName": {count: 1, properties: {alfa: {existence: false, type: "STRING", array: false}}, direction: "out", labels: ["sameName"]}}, type:"node", properties: {id: {existence: false,type: "INTEGER", indexed: false,unique: false}},labels: []}

示例配置使用示例

给定以下图

CREATE (:Foo), (:Other)-[:REL_0]->(:Other), (:Other)-[:REL_1]->(:Other)<-[:REL_2 {baz: 'baa'}]-(:Other), (:Other {alpha: 'beta'}), (:Other {foo:'bar'})-[:REL_3]->(:Other)

不带 sample 参数,我们收到

CALL apoc.meta.schema()
YIELD value RETURN value["Other"] as value;
结果
{
    "count": 8,
    "relationships": {
        "REL_2": {
            "count": 1,
            "properties": {
                "baz": {
                    "existence": false,
                    "type": "STRING",
                    "array": false
                }
            },
            "direction": "out",
            "labels": [
                "Other",
                "Other"
            ]
        },
        "REL_3": {
            "count": 1,
            "properties": {

            },
            "direction": "out",
            "labels": [
                "Other",
                "Other"
            ]
        },
        "REL_0": {
            "count": 1,
            "properties": {

            },
            "direction": "out",
            "labels": [
                "Other",
                "Other"
            ]
        },
        "REL_1": {
            "count": 1,
            "properties": {

            },
            "direction": "out",
            "labels": [
                "Other",
                "Other"
            ]
        }
    },
    "type": "node",
    "properties": {
        "alpha": {
            "existence": false,
            "type": "STRING",
            "indexed": false,
            "unique": false
        },
        "foo": {
            "existence": false,
            "type": "STRING",
            "indexed": false,
            "unique": false
        }
    },
    "labels": []
}

否则,使用 sample: 2 我们可能会得到(结果可能会改变)

CALL apoc.meta.schema({sample: 2})
YIELD value RETURN value["Other"] as value
结果
{
  "count": 8,
  "relationships": {
    "REL_1": {
      "count": 1,
      "properties": {},
      "direction": "out",
      "labels": [
        "Other",
        "Other"
      ]
    }
  },
  "type": "node",
  "properties": {
    "alpha": {
      "existence": false,
      "type": "STRING",
      "indexed": false,
      "unique": false
    }
  },
  "labels": []
}
© . This site is unofficial and not affiliated with Neo4j, Inc.