Файл Informix LOAD FROM с заголовком

Я использую команду Informix LOAD FROM для массовой вставки данных из файлов CSV в таблицу БД, например:

LOAD FROM "file.csv" DELIMITER ";" INSERT INTO table_name(col1, col2, col3)

Проблема в том, что первая строка каждого файла CSV содержит заголовки столбцов. Есть ли способ сообщить Informix, что первая строка должна быть проигнорирована?


person andreask    schedule 12.02.2015    source источник


Ответы (2)


Нет; нет способа сообщить стандартному Informix оператор LOAD, чтобы пропустить строку заголовка. Также обратите внимание, что он не будет удалять кавычки из полей в формате CSV и иным образом обрабатывать вещи так, как официально ожидает формат CSV (хотя, поскольку у вас есть значения, разделенные точкой с запятой, а не значения, разделенные запятыми, трудно понять какие правила соблюдаются — будьте осторожны и с обратной косой чертой).

Вы можете использовать утилиту Informix DB-Load (dbload); это зависит от того, используют ли ваши данные просто ; вместо разделителя Informix по умолчанию |, или у вас есть больше семантики CSV, например кавычки вокруг полей, которые необходимо удалить. Если вы хотите получить экзотику, Informix Высокопроизводительный загрузчик (HPL) может либо обрабатывать его изначально, либо его можно обучить.

В качестве альтернативы вы можете использовать мой* SQLCMD (она называлась sqlcmd намного дольше, чем программа Microsoft johnny-come-lately с таким же именем), которая позволяет указать:

LOAD FROM "file.csv" DELIMITER ";" SKIP 1 INSERT INTO table_name(col1, col2, col3);

SQLCMD также имеет параметр FORMAT CSV (среди других форматов), который может быть или не быть релевантным. Он обрабатывает такие вещи, как удаление кавычек из полей, которые поддерживает полный стандарт CSV.

Вам потребуется установить Informix ClientSDK и компилятор C (и остальную часть системы разработки C) для сборки SQLCMD.

* Поскольку SQLCMD — это моя программа, потому что я написал ее, любые рекомендации по ее использованию по своей сути предвзяты; вас предупредили.


Вы также можете использовать «внешнюю таблицу» (CREATE EXTERNAL TABLE), но я не уверен, что он лучше, чем оператор LOAD, ни с поддерживаемыми форматами, ни с возможностью пропустить первую строку данных.

person Jonathan Leffler    schedule 12.02.2015
comment
Спасибо за разъяснения! Файлы, которые я использую, на самом деле не соответствуют стандартному формату CSV, но, поскольку они будут содержать только числа и несколько дат, я не беспокоюсь о проблемах с форматом. В любом случае, я обязательно посмотрю SQLCMD, спасибо за подсказку! - person andreask; 12.02.2015

Когда я загружаю CSV-файлы с помощью LOAD FROM в Informix, я обычно загружаю их во временную таблицу, состоящую из всех символьных столбцов, с которыми я затем работаю. Вы просто удаляете строку заголовка. По сути, вы просто помещаете весь файл во временную таблицу, с которой легче работать.

person SupermanKelly    schedule 20.01.2017