对包含时间戳列的 CSV 文件使用 COPY INTO

Using COPY INTO with a CSV file containing a Timestamp column

我正在尝试使用 COPY INTO 语法导入 CSV 文件。我有以下 table

test(id int, name varchar(50), expi TIMESTAMP)

这是我的 CSV 文件的摘录:

id,name,expi
1,toto,2013-01-14T23:12:34

我没有成功提供时间戳列的格式。我应该用什么来代替???在下面的命令中?

COPY 10 OFFSET 1 RECORDS INTO test FROM '/tmp/file.csv'(id,name,???) ON CLIENT DELIMITERS ',','\r\n','"';

我尝试 (id, name, expi '%Y-%m-%dT%H:%M:%S') 遵循 CSV 批量上传 documentation 中的示例,但我收到以下错误消息:

COPY INTO: 'str_to_timestamp' missing for type timestamp

感谢您的提问。我们之前已经修复了这个问题,但是忘记将变更集推送到 MonetDB Mercurial 存储库。感谢您的提问,我们注意到了这一疏忽。因此,'str_to_timestamp' missing 错误已在此处修复:https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7fb446b3c98c。它将包含在下一个错误修复版本中。

但是,我需要对您的上述查询进行一些更改。

  1. 您还需要将 WITH TIME ZONE 添加到 CREATE TABLE 语句中,因为 strftime (底层库函数)为我们提供了 UTC 时间,并且(SQL) TIMESTAMP 是当地时间。

  2. 偏移量应为 2

因此,以下查询适用于 Linux(注意“\n”):

create table test(id int, name varchar(50), expi TIMESTAMP WITH TIME ZONE);
COPY 10 OFFSET 2 RECORDS INTO test FROM '/tmp/file.csv'(id,name,expi '%Y-%m-%dT%H:%M:%S') ON CLIENT DELIMITERS ',','\n','"';