知识库

使用 APOC 过程查看模式数据

APOC 过程提供元数据过程来查看有关数据库模式及其存储的数据的信息。

过程apoc.meta.schema()使用图数据的样本生成一个关于图标签、关系、属性等的元数据映射。

由于返回的元数据是一个映射,因此可以将其转换以更好地呈现所需的信息,并且可以将其格式化为提供数据的更表格化的结构。

这需要对映射键的集合进行 UNWIND 并获取每个键的值。

以下是一种将模式数据转换为类似于 Oracle 中的USER_TAB_COLUMNS系统对象的方法。

CALL apoc.meta.schema() YIELD value as schemaMap
UNWIND keys(schemaMap) as label
WITH label, schemaMap[label] as data
WHERE data.type = "node"
UNWIND keys(data.properties) as property
WITH label, property, data.properties[property] as propData
RETURN label,
property,
propData.type as type,
propData.indexed as isIndexed,
propData.unique as uniqueConstraint,
propData.existence as existenceConstraint

这是一个示例结果表,如果在内置教程中使用:play movies运行,并在:Person(name)上添加索引,并在:Movie(title)上添加唯一约束。输出的顺序在不同的 Neo4j 实例中不保证相同,但标签应始终分组在一起。

标签 属性 类型 是否已建立索引 唯一约束 存在约束

"Person"

"name"

"STRING"

true

false

false

"Person"

"born"

"STRING"

false

false

false

"Movie"

"tagline"

"STRING"

false

false

false

"Movie"

"title"

"STRING"

true

true

false

"Movie"

"released"

"INTEGER"

false

false

false

或者,如果使用 APOC 3.1.3.8 或更高版本(在 3.1.x 系列中)或 3.2.0.4 或更高版本(在 3.2.x 系列中),则可以使用apoc.map.sortedProperties(),对结果进行 UNWIND。

CALL apoc.meta.schema() yield value
UNWIND apoc.map.sortedProperties(value) as labelData
WITH labelData[0] as label, labelData[1] as data
WHERE data.type = "node"
UNWIND apoc.map.sortedProperties(data.properties) as property
WITH label, property[0] as property, property[1] as propData
RETURN label,
property,
propData.type as type,
propData.indexed as isIndexed,
propData.unique as uniqueConstraint,
propData.existence as existenceConstraint

输出将相同,但按标签,然后按属性以字母顺序排序。

标签 属性 类型 是否已建立索引 唯一约束 存在约束

"Movie"

"released"

"INTEGER"

false

false

false

"Movie"

"tagline"

"STRING"

false

false

false

"Movie"

"title"

"STRING"

true

true

false

"Person"

"born"

"STRING"

false

false

false

"Person"

"name"

"STRING"

true

false

false

请记住,由于 Neo4j 允许动态节点属性而不是固定模式,因此需要对数据库进行采样才能获取此数据。这可能会遗漏图中的一些元素,例如仅在标签内一小部分节点中存在的节点属性。