SAP HANA中一些重要的系统表或视图(2)——查询依赖关系

OBJECT_DEPENDENCIES 系统视图

此视图提供了有关对象之间依赖关系的信息,哪些视图引用了特定的表。

建模的时候,理解对象之间的依赖关系是非常重要的。例如,如果你正在考虑修改一个表,你需要知道哪些视图、存储过程或其他对象可能会被影响。

OBJECT_DEPENDENCIES 系统视图可以帮助识别这些依赖关系,从而更好地管理模型。这个视图包含了诸如对象名称、对象类型(如表或视图),依赖对象的名称和类型等信息。

列名称 描述
BASE_SCHEMA_NAME 基础对象的模式名称
BASE_OBJECT_NAME 基础对象的对象名称
BASE_OBJECT_TYPE 基础对象的类型
DEPENDENT_SCHEMA_NAME 依赖对象的模式名称
DEPENDENT_OBJECT_NAME 依赖对象的对象名称
DEPENDENT_OBJECT_TYPE 依赖对象的类型
DEPENDENCY_TYPE 基础对象和依赖对象之间的依赖类型

如何使用这个视图,我们来看具体的例子。

需求一:我想要知道我的视图用了哪些模型和底表

那么代码可以这么写。

其中BASE_SCHEMA_NAME和BASE_OBJECT_NAME是引用的底表或模型,BASE_OBJECT_TYPE是类型。

根据官网的说法,可以更详细地理解 DEPENDENCY_TYPE 列

显示的对象包括持久对象和临时对象。

可以使用 DEPENDENCY_TYPE 列来区分这些对象依赖类型,如下:

EXTERNAL_DIRECT:基础对象直接用在依赖的过程中。

EXTERNAL_INDIRECT:基础对象并未直接用在依赖的过程中。

所以如果 DEPENDENCY_TYPE=1则表示直接引用了查询对象,其余则是跨层级引用了。

SELECT * FROM "SYS"."OBJECT_DEPENDENCIES"
WHERE 
DEPENDENT_OBJECT_NAME = '视图名称'

SAP HANA中一些重要的系统表或视图(2)——查询依赖关系_第1张图片

 需求二:我想要知道我的底表被哪些模型用了

 其实跟上边的代码差不多,只是上边是根据DEPENDENT_SCHEMA_NAME取BASE相关信息,这里是根据BASE_OBJECT_NAME取相关的DEPENDENT信息。

SELECT * 
FROM "SYS"."OBJECT_DEPENDENCIES"
WHERE 
BASE_OBJECT_NAME = '模型'
AND LOCATE(DEPENDENT_OBJECT_NAME,'hier')=0  --层次结构,包括字段,我们这里取模型故过滤
AND DEPENDENT_SCHEMA_NAME!='PUBLIC' --PUBLIC存放的是Synonym类型,不是我们的view
ORDER BY DEPENDENCY_TYPE ASC

SAP HANA中一些重要的系统表或视图(2)——查询依赖关系_第2张图片

上边有过滤Synonym类型,什么是Synonym呢?其实之前也没有特别关注过,根据官网的定义:

A synonym is an alternative name for a database table. You can use synonyms, for example, in order to shorten long or complicated table names.

Within a database schema, each synonym needs to have a unique name that is different from all other table names.

synonym同义词 使用 同义词是数据库表的另一个名称。例如,你可以使用同义词来缩短长的或复杂的表名。

在数据库模式中,每个同义词都需要有一个独特的名称,与所有其他表名都不同。

同义词是数据库中的一种对象,可以为表、视图、序列、存储过程、函数等数据库对象提供别名。这样,用户就可以使用这个别名来引用原始对象,而无需知道对象的实际名称或位置。这在处理复杂的数据库结构或跨模式访问时非常有用。

 

你可能感兴趣的:(HANA,数据库)