如何在 IBM DB2 IMPORT 命令中添加动态文件名路径?
How to add dynamic filename path in IBM DB2 IMPORT Command?
我正在使用 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 不是 SQL 语句,因此它无法从访问 RDBMS 变量中获益。您可以为每个 csv 文件生成一个唯一的命令字符串,或者您可以使用 ETL 工具的功能,或者您可以使用任意数量的脚本语言为每个导入动态创建命令字符串。
您可以尝试为 IMPORT
创建命令字符串,然后将其用作 ADMIN_CMD 过程的参数。该过程采用包含选项的整个命令的字符串作为单个输入参数。
阅读各种资源后,确认我们不能在 db2 导入实用程序中使用 db2 变量。因为 import 命令不会读取 db2 变量值。
所以我创建了一个系统变量,并在导入命令中使用了相同的变量。有效。
以管理员身份打开 DB2 CLP 并运行执行以下命令。
以前我使用 DB2 变量来获取文件名。
现在我正在使用上次修改的文件命令 (Windows cmd) 来获取相同的文件名。这就是我所期望的。
我正在使用 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 不是 SQL 语句,因此它无法从访问 RDBMS 变量中获益。您可以为每个 csv 文件生成一个唯一的命令字符串,或者您可以使用 ETL 工具的功能,或者您可以使用任意数量的脚本语言为每个导入动态创建命令字符串。
您可以尝试为 IMPORT
创建命令字符串,然后将其用作 ADMIN_CMD 过程的参数。该过程采用包含选项的整个命令的字符串作为单个输入参数。
阅读各种资源后,确认我们不能在 db2 导入实用程序中使用 db2 变量。因为 import 命令不会读取 db2 变量值。 所以我创建了一个系统变量,并在导入命令中使用了相同的变量。有效。
以管理员身份打开 DB2 CLP 并运行执行以下命令。
以前我使用 DB2 变量来获取文件名。
现在我正在使用上次修改的文件命令 (Windows cmd) 来获取相同的文件名。这就是我所期望的。