apache cassandra copy from,datetime输入错误

qyuhtwio  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(317)

我可以看到cassandra中copy-from命令有一个奇怪的问题,它带有datetime值。
我的时区和服务器的时区相同。国际标准时间(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行。

nbewdwxp

nbewdwxp1#

我可以复制你提到的场景。
我的服务器时区 EST .
我运行了您提供的insert,并使用您提供的文件通过copy命令加载数据

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 so-0500,你的情况是ist so+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

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

相关问题