Apache Cassandra COPY FROM,日期时间输入错误

问题描述 投票:2回答:1

我可以在Cassandra中看到带有日期时间值的COPY FROM命令的奇怪问题。

我的时区和服务器的时区相同。 IST(GMT + 5:30)

首先,我尝试使用INSERT查询插入值。

INSERT INTO activity (home_id, datetime, event, code_used) VALUES ('H01474777', '2014-05-21 07:32:16', 'alarm set', '5599');

它给了我下面一行。

 home_id   | datetime                        | code_used | event
-----------+---------------------------------+-----------+-----------
 H01474777 | 2014-05-21 02:02:16.000000+0000 |      5599 | alarm set

此处Cassandra通过删除+5:30在GMT中显示时间值

但是当我尝试通过COPY FROM命令插入以下内容时,您可以看到它在显示GMT值时增加了+5:30,就像添加行时一样,它增加了11个小时。分别参见下面的文件,查询和输出。

home_id|datetime|event|code_used
H02257222|2014-05-21 05:29:47|alarm set|1566
H01474777|2014-05-21 07:32:16|alarm set|5599

查询:

COPY activity (home_id, datetime, event, code_used) FROM '/home/cass/events.csv' WITH HEADER = TRUE AND DELIMITER = '|';

结果:

 home_id   | datetime                        | code_used | event
-----------+---------------------------------+-----------+-----------
 H01474777 | 2014-05-21 13:02:16.000000+0000 |      5599 | alarm set
 H01474777 | 2014-05-21 02:02:16.000000+0000 |      5599 | alarm set --Old row from insert query.
 H02257222 | 2014-05-21 10:59:47.000000+0000 |      1566 | alarm set

这里的前2行是相同的数据,表的前2列是主键,但是又创建了另一行,因为应该只有2行。

cassandra cql cqlsh
1个回答
1
投票

我能够复制您提到的方案。

我的服务器时区EST

我运行了您提供的插入,并使用了您提供的文件通过复制命令加载了数据

INSERT INTO activity (home_id, datetime, event, code_used) VALUES ('H01474777', '2014-05-21 07:32:16', 'alarm set', 5599);

home_id   | datetime                        | code_used | event
-----------+---------------------------------+-----------+-----------
H01474777 | 2014-05-21 07:32:16.000000+0000 |      5599 | alarm set

COPY activity (home_id, datetime, event, code_used) FROM 'temp.csv' WITH HEADER = TRUE AND DELIMITER = '|'

 home_id   | datetime                        | code_used | event
-----------+---------------------------------+-----------+-----------
 H01474777 | 2014-05-21 02:32:16.000000+0000 |      5599 | alarm set
 H01474777 | 2014-05-21 07:32:16.000000+0000 |      5599 | alarm set
 H02257222 | 2014-05-21 00:29:47.000000+0000 |      1566 | alarm set

在文件中,您没有在datetime列中提到任何时区。因此,它将本地区域视为其区域。就我而言,它是EST,所以-0500,而您的情况是IST,所以+0530

您的文件将是

home_id|datetime|event|code_used
H02257222|2014-05-21 05:29:47.000+0530|alarm set|1566
H01474777|2014-05-21 07:32:16.000+0530|alarm set|5599

如果您按如下方式修改csv文件,然后,您将只看到H01474777的一行。

home_id|datetime|event|code_used
H02257222|2014-05-21 05:29:47.000+0000|alarm set|1566
H01474777|2014-05-21 07:32:16.000+0000|alarm set|5599

希望这会有所帮助!如果您有任何问题,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.