apoc.meta.data

详细信息

语法

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)

此属性是否存在存在约束(existence constraint)。

type

STRING

此行所代表的类型。

array

布尔值 (BOOLEAN)

指示属性是否为数组。如果类型列为 "RELATIONSHIP",当至少有一个节点具有两个由标签或属性列指定的类型的传出关系时,此项将为 true。

sample

LIST<ANY>

此项始终为空(null)。

left

INTEGER(整数)

特定标签和关系类型的传出关系计数相对于这些模式总数的比率(向下取整)。

right

INTEGER(整数)

特定标签和关系类型的传入关系计数相对于这些模式总数的比率(向下取整)。

other

LIST<STRING>

连接节点的标签。

otherLabels

LIST<STRING>

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

elementType

STRING

是指向节点还是关系。

配置参数

此过程支持以下配置参数

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

sample

INTEGER(整数)

1000

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

采样 (Sampling)

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

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

示例 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 (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 值,我们提供了可能度平均值的数据集估计。