知识库

使用 APOC 过程查看模式数据

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

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

由于返回的元数据是映射(map),可以对其进行转换以更好地展示所需信息,并且可以格式化以提供更表格化的数据结构。

这需要对映射键的集合进行 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

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

标签 (label) 属性 (property) type 已建索引 唯一约束 存在约束

"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

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

标签 (label) 属性 (property) type 已建索引 唯一约束 存在约束

"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 允许动态节点属性而非固定模式,需要对数据库进行抽样才能获取这些数据。这可能会遗漏图中的某些元素,例如仅在某标签下少量节点中出现的属性。

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