#linux #csv #import #db2
#linux #csv #импорт #db2
Вопрос:
Я новичок в Linux и хотел бы обратиться к вам за помощью. Задача состоит в том, чтобы импортировать данные csv в DB2. Он находится в сценарии оболочки и выполняется по расписанию. У файла есть заголовок, поэтому я использовал skipcount 1. Разделителем является запятая, поэтому, поскольку он используется по умолчанию, я не включил COLDEL.
-
Можете ли вы помочь мне устранить причину, по которой при запуске скрипта мы получили приведенную ниже ошибку? Я использую IMPORT и INSERT_UPDATE, потому что я узнал, что метод LOAD удаляет все содержимое таблицы перед импортом данных из файла CSV. Существующие данные в таблице не следует удалять. Записи будут обновлены только при наличии изменений в файле CSV, в противном случае следует создать новую запись.
-
Я смотрю, какой МЕТОД следует использовать для получения конкретных значений из файла 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
содержимое таблицы, опустошая ее в начале.