我将CSV
导入MonetDB
。我创建了一个名为fx的表:
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?
答案 0 :(得分:3)
文件中的时间戳格式不是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
转换为timestamp类型的新列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
应该可以直接使用。