2015-09-08 7 views
0

Я импортирую CSV в MonetDB. Я создаю таблицу под названием FX:Импорт CSV в MonetDB

CREATE TABLE fx(ticktime timestamp,broker varchar(6),pair varchar(10),side varchar(1),price float,size tinyint,level tinyint) 

и теперь я пытаюсь загрузить большой CSV файл, который не имеет заголовка.

Мой sample.csv:

20150828 00:00:00.023,BRK1,EUR/USD,A,1.12437,1,1 
20150828 00:00:00.023,BRK1,EUR/USD,A,1.12439,5,2 
20150828 00:00:00.023,BRK1,EUR/USD,A,1.12441,9,3 

Моя команда:

sql>copy into fx from 'c:\fx\sample.csv' using delimiters ',','\n'; 
Failed to import table line 1 field 1 'timestamp(7)' expected in '20150828 00:00:00.023' 

Как загрузить этот файл CSV?

ответ

1

Формат timestamp в вашем файле не тот, который нравится MonetDB. Так два варианта:

1) Изменить тип ticktime к string:

CREATE TABLE fx(ticktime string, broker varchar(6),pair varchar(10),side varchar(1),price float,size tinyint,level tinyint); 
COPY INTO ... 

Однако затем необходимо преобразовать столбец строки ticktime в новый столбец ticktimet типа временной метки с помощью манипуляций со строками, для пример:

ALTER TABLE fx add column ticktimet timestamp; 
UPDATE fx SET ticktimet=str_to_timestamp(ticktime , '%Y%m%d %H:%M:%S'); 

Обратите внимание, что это решение будет отбрасывать субсекундную часть (например .023) с отметки времени, так как это в настоящее время не поддерживается в str_to_timestamp.

2) Измените CSV, чтобы использовать формат даты MonetDB нравится, например.

2015-08-28 00:00:00.023,BRK1,EUR/USD,A,1.12437,1,1 
2015-08-28 00:00:00.023,BRK1,EUR/USD,A,1.12439,5,2 
2015-08-28 00:00:00.023,BRK1,EUR/USD,A,1.12441,9,3 

Затем COPY INTO должен работать непосредственно.