apoc.meta.data
|
此过程不被认为在多线程环境中运行安全。因此,并行运行时不支持此过程。欲了解更多信息,请参阅Cypher 手册 → 并行运行时。 |
语法 |
|
||
描述 |
检查整个图并返回元数据表。 |
||
输入参数 |
名称 |
类型 |
描述 |
|
|
要采样的节点数量,将 sample 设置为 |
|
返回参数 |
名称 |
类型 |
描述 |
|
|
标签或类型名称。 |
|
|
|
属性名称。 |
|
|
|
已见值的计数。 |
|
|
|
是否所有已见值都是唯一的。 |
|
|
|
此属性是否存在索引。 |
|
|
|
此属性是否存在存在性约束。 |
|
|
|
此行所代表的类型。 |
|
|
|
指示属性是否为数组。如果类型列为“RELATIONSHIP”,则当至少有一个节点具有两个指定标签或属性列类型的外向关系时,此值为 true。 |
|
|
|
此项始终为空。 |
|
|
|
特定标签和关系类型的外向关系计数与这些模式总计数之比(向下取整)。 |
|
|
|
特定标签和关系类型的入向关系计数与这些模式总计数之比(向下取整)。 |
|
|
|
连接节点的标签。 |
|
|
|
对于唯一性约束,此字段显示也包含唯一性约束的节点上的其他标签。 |
|
|
|
这指的是节点还是关系。 |
|
配置参数
此过程支持以下配置参数
| 名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
|
|
1000 |
要采样的节点数量。将 |
采样
指定 sample 参数(默认为 1000)以分析数据的子集。
采样以及每个标签的节点计数用于计算跳过值。由于此值是使用随机数生成器生成的,因此通过采样方法获得的结果在后续运行中可能会有所不同。
如果数据库包含 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 个外向关系,且其类型由 label 或 property 列给出时(例如,上述示例中的 ACTED_IN),结果将为 true。
left、right 和 count 列仅与 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 个节点。
因此,通过 right 和 left 值,我们提供了可能平均度数的估算数据集。