Импорт CSV с полем метки времени в MonetDB

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

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

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

Мой образец.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?


person user1167650    schedule 08.09.2015    source источник


Ответы (1)


Формат метки времени в вашем файле не тот, который нравится 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 типа timestamp, используя манипуляции со строками, например:

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 должен работать напрямую.

person Hannes Mühleisen    schedule 09.09.2015