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

apoc.meta.data

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

详情

语法

apoc.meta.data([ config ]) :: (label, property, count, unique, index, existence, type, array, sample, left, right, other, otherLabels, elementType)

描述

检查整个图并返回元数据表。

输入参数

名称

类型

描述

config

MAP

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

返回参数

名称

类型

描述

label

STRING

标签或类型名称。

property

STRING

属性名称。

count

INTEGER

已见值的计数。

unique

BOOLEAN

是否所有已见值都是唯一的。

index

BOOLEAN

此属性是否存在索引。

existence

BOOLEAN

此属性是否存在存在性约束。

type

STRING

此行所代表的类型。

array

BOOLEAN

指示属性是否为数组。如果类型列为“RELATIONSHIP”,则当至少有一个节点具有两个指定标签或属性列类型的外向关系时,此值为 true。

sample

LIST<ANY>

此项始终为空。

left

INTEGER

特定标签和关系类型的外向关系计数与这些模式总计数之比(向下取整)。

right

INTEGER

特定标签和关系类型的入向关系计数与这些模式总计数之比(向下取整)。

other

LIST<STRING>

连接节点的标签。

otherLabels

LIST<STRING>

对于唯一性约束,此字段显示也包含唯一性约束的节点上的其他标签。

elementType

STRING

这指的是节点还是关系。

配置参数

此过程支持以下配置参数

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

sample

INTEGER

1000

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

采样

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

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

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

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

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

采样 10:跳过计数 = 500 / 10 = 50
最终的跳过计数将介于 45 和 55 之间。

采样 50:跳过计数 = 500 / 50 = 10
最终的跳过计数将介于 9 和 11 之间。

采样 100:跳过计数 = 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 (Carrie:Person {name:'Carrie-Anne Moss', born:1967})
CREATE (Laurence:Person {name:'Laurence Fishburne', born:1961})
CREATE (Hugo:Person {name:'Hugo Weaving', born:1960})
CREATE (LillyW:Person {name:'Lilly Wachowski', born:1967})
CREATE (LanaW:Person {name:'Lana Wachowski', born:1965})

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 (Something:Something:Else {foo: 'bar'})

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 (Keanu)-[:LIKES {rate:10}]->(Carrie)
CREATE (Keanu)-[:LIKES {rate:6}]->(TomH)
CREATE (Keanu)-[:LIKES {rate:4}]->(Laurence)
CREATE (Keanu)-[:LIKES {rate:8}]->(Hugo)
CREATE (Keanu)-[:LIKES {rate:9}]->(LillyW)
CREATE (Keanu)-[:LIKES {rate:6}]->(LanaW)
CREATE (Keanu)-[:LIKES {rate:100}]->(TheMatrix)
CREATE (Carrie)-[:LIKES {rate:7}]->(Keanu)

CREATE (Something)-[:RELATED_TO {rate:99}]->(TheMatrix)
CREATE (Keanu)-[:RELATED_TO {rate:12}]->(TheMatrix)
CREATE (Keanu)-[:RELATED_TO {rate:12}]->(TheMatrixReloaded)
CREATE (Keanu)-[:RELATED_TO {rate:23}]->(TheMatrixRevolutions)
CREATE (Carrie)-[:RELATED_TO {rate:34}]->(TheMatrix)
CREATE (TheMatrix)-[:RELATED_TO {rate:34}]->(Laurence)
CREATE (TheMatrixReloaded)-[:RELATED_TO {rate:345}]->(LanaW)
CALL apoc.meta.data();
结果
label property count unique index existence type array sample left right other otherLabels elementType

"ACTED_IN"

"Person"

2

false

false

false

"RELATIONSHIP"

true

null

4

0

["Movie"]

[]

"relationship"

"ACTED_IN"

"roles"

0

false

false

false

"LIST"

true

null

0

0

[]

[]

"relationship"

"LIKES"

"Person"

2

false

false

false

"RELATIONSHIP"

true

null

4

1

["Movie", "Person"]

[]

"relationship"

"LIKES"

"rate"

0

false

false

false

"INTEGER"

false

null

0

0

[]

[]

"relationship"

"RELATED_TO"

"Person"

2

false

false

false

"RELATIONSHIP"

true

null

2

0

["Movie"]

[]

"relationship"

"RELATED_TO"

"rate"

0

false

false

false

"INTEGER"

false

null

0

0

[]

[]

"relationship"

"RELATED_TO"

"Movie"

2

false

false

false

"RELATIONSHIP"

false

null

1

2

["Person"]

[]

"relationship"

"RELATED_TO"

"Something"

1

false

false

false

"RELATIONSHIP"

false

null

1

0

["Movie"]

[]

"relationship"

"RELATED_TO"

"Else"

1

false

false

false

"RELATIONSHIP"

false

null

1

0

["Movie"]

[]

"relationship"

"Person"

"RELATED_TO"

2

false

false

false

"RELATIONSHIP"

true

null

2

0

["Movie"]

[]

"node"

"Person"

"ACTED_IN"

2

false

false

false

"RELATIONSHIP"

true

null

4

0

["Movie"]

[]

"node"

"Person"

"LIKES"

2

false

false

false

"RELATIONSHIP"

true

null

4

1

["Movie", "Person"]

[]

"node"

"Person"

"born"

0

false

false

false

"INTEGER"

false

null

0

0

[]

[]

"node"

"Person"

"name"

0

false

false

false

"STRING"

false

null

0

0

[]

[]

"node"

"Movie"

"RELATED_TO"

2

false

false

false

"RELATIONSHIP"

false

null

1

2

["Person"]

[]

"node"

"Movie"

"title"

0

false

false

false

"STRING"

false

null

0

0

[]

[]

"node"

"Movie"

"tagline"

0

false

false

false

"STRING"

false

null

0

0

[]

[]

"node"

"Movie"

"released"

0

false

false

false

"INTEGER"

false

null

0

0

[]

[]

"node"

"Something"

"RELATED_TO"

1

false

false

false

"RELATIONSHIP"

false

null

1

0

["Movie"]

[]

"node"

"Something"

"foo"

0

false

false

false

"STRING"

false

null

0

0

[]

[]

"node"

"Else"

"RELATED_TO"

1

false

false

false

"RELATIONSHIP"

false

null

1

0

["Movie"]

[]

"node"

"Else"

"foo"

0

false

false

false

"STRING"

false

null

0

0

[]

[]

"node"

unique 列显示在特定标签和属性中是否存在唯一约束。类似地,index 列显示是否存在索引,而 existence 查找是否存在性约束。

array 列检查行是否为数组类型,如果 type 列是 "RELATIONSHIP",则当至少有一个节点具有 2 个外向关系,且其类型由 labelproperty 列给出时(例如,上述示例中的 ACTED_IN),结果将为 true

leftrightcount 列仅与 type 列等于 "RELATIONSHIP" 的行有关(否则它们等于 0)。请注意,由于我们检查的是样本,这些计数只是一个概览性估计,其与实际值的接近程度取决于数据集和样本集(默认为 100)。

特别是,count 列表示具有外向关系的节点数量(例如,标签为 ACTED_IN 且属性为 Person 的行其 count 为 2,因为有 2 个节点 (node:Person)-[:ACTED_IN]→(),即 (Keanu)(TomH))。

left 值表示某个标签和特定关系类型的出向模式计数与 count 之比(向下取整)。在 Cypher 中,它对应于

MATCH p=(start:`<LABEL>`)-[:`<TYPE>`]->()
WITH count(distinct start) as nodes, count(p) as counts
RETURN CASE when nodes = 0 then 0 else counts / nodes end

例如,对于标签为 RELATED_TO 且属性为 Movie 的行,有 2 个关系 (:Movie)-[rel:RELATED_TO]→(),即 (TheMatrix)-[:RELATED_TO {rate:34}]→(Laurence)(TheMatrixReloaded)-[:RELATED_TO {rate:345}]→(LanaW)。因此,left 值为 1(2 个关系除以找到的 2 个节点)。

相反,对于标签为 LIKES 且属性为 Person 的行,有 8 个关系 (:Person)-[rel:LIKES]→(),其中 7 个从 (Keanu) 节点开始,1 个从 (Carrie) 开始。那么 left 值为 4(8 个关系除以找到的 2 个节点)。

right 值是某个标签和特定关系类型的入向模式计数与 count 之比(向下取整),其中计入的模式是那些具有等效出向关系的模式。在 Cypher 中,它对应于

MATCH p=(start:`<LABEL>`)<-[:`<TYPE>`]-()
WHERE exists((start:`<LABEL>`)-[:`<TYPE>`]->())
WITH count(distinct start) as nodes, count(p) as counts
RETURN CASE when nodes = 0 then 0 else counts / nodes end

例如,对于标签为 RELATED_TO 且属性为 Movie 的行,具有外向 RELATED_TO 关系的 (TheMatrix) 节点也有 3 个入向关系,而 TheMatrixReloaded 节点有 1 个入向关系。因此 right 值为 2,即 4 除以找到的 2 个节点。

因此,通过 rightleft 值,我们提供了可能平均度数的估算数据集。

© . This site is unofficial and not affiliated with Neo4j, Inc.