ODI12c中如何从数据存储别名获取实际资源名称?
在ODI12c中通过数据存储别名获取实际资源名称(平面文件名)
针对你遇到的问题——用odiRef.getObjectName()只能拿到数据存储别名,无法获取关联的实际资源名称(平面文件名),可以通过以下几种方法解决:
方法1:直接查询ODI元数据视图
ODI的元数据存储在工作库的Oracle表中,通过关联数据存储和资源的核心表即可获取对应关系:
- 关键关联表说明:
SNP_TABLE:存储数据存储的基础信息,ALIAS字段是你设置的别名,RESOURCE_ID字段关联到资源表SNP_RESOURCE:存储资源(如平面文件)的实际名称,RESOURCE_NAME字段就是你需要的实际文件名
- 查询语句示例:
SELECT r.RESOURCE_NAME FROM SNP_TABLE t INNER JOIN SNP_RESOURCE r ON t.RESOURCE_ID = r.RESOURCE_ID WHERE t.ALIAS = '你的数据存储别名' -- 可选:添加模型过滤避免同名别名冲突 AND t.I_MODEL = (SELECT I_MODEL FROM SNP_MODEL WHERE CODE = '你的模型代码')
你可以将这个查询配置为ODI变量的「SQL SELECT」类型,执行后就能获取对应的资源名称。
方法2:使用ODI内置的odiRef.getResourceName()方法
ODI的odiRef对象提供了专门获取资源名称的方法,无需手动查询元数据表:
- 如果是在接口步骤上下文中(比如加载/转换逻辑里),直接调用无参方法即可获取当前数据存储的资源名称:
odiRef.getResourceName() - 如果是在包、变量等独立上下文中,需要指定数据存储的完整标识(模型代码+别名):
参数说明:odiRef.getResourceName('TABLE', '模型代码.数据存储别名', 'D')- 第一个参数
'TABLE'表示对象类型为数据存储 - 第二个参数是数据存储的完整标识(模型代码+别名,用点分隔)
- 第三个参数
'D'表示目标对象为数据存储(Data Store)
- 第一个参数
方法3:快速验证关联关系的小技巧
如果不确定数据存储的关联资源ID,可以先查询SNP_TABLE表确认:
SELECT RESOURCE_ID, ALIAS, TABLE_NAME FROM SNP_TABLE WHERE ALIAS = '你的数据存储别名'
拿到RESOURCE_ID后,直接查询SNP_RESOURCE表就能看到对应的RESOURCE_NAME。
内容的提问来源于stack exchange,提问作者ume05rw
相关产品推荐
相关产品推荐

