Сценарий оболочки Linux при импорте файла данных csv в DB2

#linux #csv #import #db2

#linux #csv #импорт #db2

Вопрос:

Я новичок в Linux и хотел бы обратиться к вам за помощью. Задача состоит в том, чтобы импортировать данные csv в DB2. Он находится в сценарии оболочки и выполняется по расписанию. У файла есть заголовок, поэтому я использовал skipcount 1. Разделителем является запятая, поэтому, поскольку он используется по умолчанию, я не включил COLDEL.

  1. Можете ли вы помочь мне устранить причину, по которой при запуске скрипта мы получили приведенную ниже ошибку? Я использую IMPORT и INSERT_UPDATE, потому что я узнал, что метод LOAD удаляет все содержимое таблицы перед импортом данных из файла CSV. Существующие данные в таблице не следует удалять. Записи будут обновлены только при наличии изменений в файле CSV, в противном случае следует создать новую запись.

  2. Я смотрю, какой МЕТОД следует использовать для получения конкретных значений из файла CSV, и в настоящее время я использую МЕТОД 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:

Вы не можете размещать предложения в произвольном порядке в команде IMPORT.
Поместите skipcount 1 предложение перед messages .

Команда LOAD может либо INSERT создать новую порцию данных, либо REPLACE содержимое таблицы, опустошая ее в начале.