咨询ODI 12c导出CSV文件步骤:含按<当前日期筛选DB表数据需求
ODI 12c 导出数据至CSV文件操作指南
我来帮你梳理ODI 12c导出CSV的两种场景操作——先讲通用的无过滤导出步骤,再一步步拆解带当前日期条件的具体流程,都是实际项目里常用的操作:
一、通用导出步骤(无过滤条件)
这些是不管导出什么数据都要走的基础流程:
- 配置源数据库的连接信息
先在ODI拓扑管理器里,给你的源数据库(Oracle/MySQL/SQL Server等)创建数据服务器,填好连接串、用户名密码;接着创建对应的物理架构,指定要访问的数据库模式;最后创建逻辑架构,把它关联到物理架构,并分配到对应的上下文。
- 配置源数据库的连接信息
- 配置CSV目标的文件服务器
CSV属于文件系统,所以要创建文件类型的数据服务器,指定CSV文件要存放的目录(本地路径或者共享网络目录,记得要保证ODI代理有读写权限!);同样创建对应的物理架构和逻辑架构,关联好上下文。
- 配置CSV目标的文件服务器
- 创建映射(Mapping)
打开ODI设计器,新建一个Mapping:把源数据库模型里的目标表拖到映射的逻辑图中,再把CSV逻辑架构下的文件(可以直接新建,指定文件名)拖进来作为目标。
- 创建映射(Mapping)
- 配置CSV文件格式
选中目标CSV文件,在属性面板里设置:
- 字段分隔符:一般用逗号
,,也可以根据需求改 - 文本限定符:比如双引号
",避免字段里有分隔符导致格式混乱 - 编码:推荐用
UTF-8保证兼容性,特殊场景可以用GBK - 勾选"生成表头",方便后续查看数据
- 配置CSV文件格式
- 执行并验证
保存Mapping后,你可以直接在设计器里点击执行按钮测试,或者创建**场景(Scenario)**来执行。执行完成后,去你指定的目录找到CSV文件,打开确认数据是否正确。
- 执行并验证
二、导出满足当前日期条件数据的具体操作流程
如果要只导出当天的数据,核心是加过滤条件,具体步骤如下:
- 确认源表的日期字段
先通过ODI的逆向工程,把要导出的表导入到源数据库模型里,确认表中有日期类型的字段(比如create_date、update_time)。
- 确认源表的日期字段
- 新建/复用Mapping
要么新建一个Mapping,要么在之前的通用Mapping基础上修改。把源表和目标CSV文件都添加到映射中。
- 新建/复用Mapping
- 添加当前日期过滤条件
选中源表,点击"过滤器(Filter)"按钮,添加过滤条件。不同数据库的日期函数略有不同,给你几个常用的:
- Oracle数据库:
TRUNC(orders.create_date) = TRUNC(SYSDATE) - MySQL数据库:
DATE(orders.create_date) = DATE(NOW())
如果你想让条件更通用(适配多种数据库),可以用ODI内置变量:TRUNC(orders.create_date) = TRUNC(#{odi_sys_date})
提示:这里的
orders是你的源表名,记得替换成实际表名;create_date替换成你要用来筛选的日期字段。- 添加当前日期过滤条件
- 配置动态文件名(可选但实用)
为了避免每天导出的CSV覆盖之前的文件,可以给文件名加上日期后缀。在目标CSV的文件名里设置:daily_data_export_#{odi_sys_date, 'yyyyMMdd'}.csv,这样导出的文件名会自动变成daily_data_export_20240520.csv这种格式。
- 配置动态文件名(可选但实用)
- 预览数据并执行
先点击Mapping里的"数据预览"按钮,看看过滤后的数据是不是当天的,确认条件生效。没问题的话,创建场景并执行,或者直接运行Mapping。
- 预览数据并执行
- 自动调度(可选)
如果需要每天自动导出,去ODI调度管理器里创建一个计划(Schedule),关联刚才的场景,设置每天的执行时间(比如凌晨2点),这样就能自动完成导出任务了。
- 自动调度(可选)
内容的提问来源于stack exchange,提问作者user2134292




