ODI 12c变量技术求助:从DB表读取文件名并实现文件映射打包
ODI实现从文件名单表读取文件并映射至目标表的完整流程
1. 创建并配置ODI变量(读取文件名)
- 新建变量,类型选择字符串,变量值获取方式设为从SQL查询获取
- 编写SQL查询从文件名单表读取目标文件名,示例:
SELECT FILE_NAME FROM YOUR_FILE_LIST_TABLE WHERE PROCESS_FLAG = 'N' -- 用PROCESS_FLAG标记未处理文件 - 配置变量刷新规则:需循环处理多文件则设为每次刷新;仅处理单个文件可设为执行前刷新
- 关联变量到文件名单表所在的数据库逻辑架构
2. 创建文件数据源与模型
- 新建文件逻辑架构,指向存储目标文件的目录(本地路径或共享目录均可)
- 创建文件模型并导入目标文件格式(CSV/Txt等):
- 定义文件分隔符、列名、数据类型,确保与实际文件格式匹配
- 在模型资源配置中,将文件名设置为变量引用:
#GLOBAL.YOUR_VAR_NAME(替换为你的变量名)
3. 创建文件到目标表的映射
- 新建映射,源选择上述文件模型,目标选择数据库目标表
- 完成字段映射:按文件列与目标表列的对应关系逐一匹配,必要时添加转换规则(如格式转换、字段拼接)
- 确认映射执行配置的上下文包含文件逻辑架构与目标数据库的正确配置
4. 创建ODI包串联全流程
- 新建包,添加以下步骤并设定执行顺序:
- 步骤1:刷新变量:调用文件名变量,确保获取最新未处理文件名
- 步骤2:执行映射:运行文件到目标表的映射任务
- 步骤3:更新文件状态(可选):添加SQL工具步骤,标记已处理文件,示例:
UPDATE YOUR_FILE_LIST_TABLE SET PROCESS_FLAG = 'Y', PROCESS_DATE = SYSDATE WHERE FILE_NAME = '#GLOBAL.YOUR_VAR_NAME'
- 如需批量处理多文件,添加循环组件:
- 设置循环条件:如
#GLOBAL.YOUR_VAR_NAME IS NOT NULL - 循环体内包含步骤1-3,直至无未处理文件
- 设置循环条件:如
5. 测试与调试要点
- 单独测试变量刷新,验证是否能正确读取文件名
- 用固定文件名单独运行映射,确认数据可正常加载至目标表
- 运行包时查看ODI日志,排查变量未刷新、文件权限不足、字段映射错误等问题
- 确保ODI代理账号拥有文件目录读取权限,数据库账号拥有文件名单表与目标表的读写权限
内容的提问来源于stack exchange,提问作者cosmobeast
相关产品推荐
相关产品推荐

