使用 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 | 已建索引 | 唯一约束 | 存在约束 |
|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
作为替代方案,如果使用 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 | 已建索引 | 唯一约束 | 存在约束 |
|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
请记住,由于 Neo4j 允许动态节点属性而非固定模式,需要对数据库进行抽样才能获取这些数据。这可能会遗漏图中的某些元素,例如仅在某标签下少量节点中出现的属性。
此页面有帮助吗?