我正在使用DB2实用程序从CSV到DB2进行ETL过程。挑战是在import命令中将动态文件名指定为db2变量。 以下是示例代码
connect to database;
CREATE OR REPLACE VARIABLE filenamePath VARCHAR(225);
SET filenamePath= concat(concat('Z:/directory/file_',ts_fmt(current timestamp - 2 DAY,'ddmmyyyy')),'.csv');
import from '@filenamePath' of DEL SKIPCOUNT 1 insert into table;
connect reset;
这里ts_fmt是以特定格式获取日期的存储过程。我正在获取@filenamePath的输出
如果我运行以下声明,
select @filenamePath FROM sysibm.sysdummy1;
我会得到像
这样的输出Z:/directory/file_13092017.csv
但是对于import命令,我发现找不到文件错误。
答案 0 :(得分:1)
从各种资源中读取后,确认我们不能在db2 import实用程序中使用db2变量。由于import命令不会读取db2变量值。 所以我创建了一个系统变量,并在import命令中使用了相同的变量。它有效。
以管理员身份打开DB2 CLP并运行以下命令。
以前我使用DB2变量来获取文件名。
现在我使用上次修改的文件命令(Windows cmd)来获取相同的文件名。这就是我的预期。
答案 1 :(得分:0)
您收到该错误是因为IMPORT不是SQL语句,因此无法从访问RDBMS变量中受益。您可以为每个csv文件生成唯一的命令字符串,也可以使用ETL-tooling的功能,也可以使用任意数量的脚本语言为每个导入动态创建命令字符串。
答案 2 :(得分:0)
您可以尝试为IMPORT
创建命令字符串,然后将其用作ADMIN_CMD过程的参数。该过程采用包含整个命令的字符串,包括选项作为单个输入参数。