将csv数据文件导入DB2的Linux shell脚本

时间:2019-03-12 01:29:19

标签: linux csv import db2

我是Linux的新手,并希望寻求您的帮助。任务是将csv数据导入DB2。它在shell脚本中,并按计划运行。该文件具有一个标题,这就是为什么我使用skipcount 1的原因。分隔符是逗号,因此,由于它是默认分隔符,因此我不包含COLDEL。

  1. 您能帮我解决为什么在运行脚本时出现以下错误吗?我使用 IMPORT INSERT_UPDATE 是因为我了解到 LOAD 方法会在从CSV文件导入数据之前删除表的全部内容。表中的现有数据不应删除。仅当CSV文件中有更改时,记录才会更新,否则,应创建一个新记录。

  2. 我正在查看应使用哪个 METHOD 从CSV文件中获取特定值,目前我正在使用 METHOD P 。对于参数中的编号,我不太确定,它是否表示要访问多少列,是否应该与我从文件中导入的列相符?

下面是脚本片段:

db2 connect to MYDB user $USERID using $PASSWORD

LOGFILE=/load/log/MYDBLog.txt

if [ -f /load/data/CUST_GRP.csv ]; then
db2 "import from /load/data/CUST_GRP.csv of del skipcount 1 modified by usedefaults METHOD P(1,2,3,4,5)
messages $LOGFILE
insert_update into myuser.CUST(NUM_ID,NUM_GRP,NUM_TEAM,NUM_LG,NUM_STATUS)";
else echo "/load/data/CUST_GRP.csv file not found." >> $LOGFILE;
fi

if [ -f /load/data/CUST_GRP.csv ]; then
db2 "import from /load/data/CUST_GRP.csv of del skipcount 1 modified by dateformat=\"YYYY-MM-DD\" timeformat=\"HH:MM:SS\" usedefaults METHOD P(1,2,3,4,5,6,7)
messages $LOGFILE
insert_update into myuser.MY_CUST(NUM_CUST,DTE_START,TME_START,NUM_CUST_CLSFCN,DTE_END,TME_END,NUM_CUST_TYPE)";
else echo "/load/data/CUST_GRP.csv file not found." >> $LOGFILE;
fi

我遇到的错误是这样的:

SQL0104N  An unexpected token "modified" was found following "<identifier>".
Expected tokens may include:  "INSERT".  SQLSTATE=42601

谢谢!

1 个答案:

答案 0 :(得分:0)

您不能在IMPORT命令中以任意顺序放置子句。
skipcount 1子句放在messages之前。

LOAD命令可以INSERT数据的新部分或表内容REPLACE的开头将其清空。