【问题标题】:Apache Cassandra COPY FROM, datetime entered incorrectlyApache Cassandra COPY FROM,日期时间输入错误
【发布时间】:2020-04-12 22:31:19
【问题描述】:

我可以在 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】:

    我能够复制你提到的场景。

    我的服务器时区 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
    

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

    【讨论】:

      猜你喜欢
      • 2017-04-02
      • 2018-07-08
      • 2015-12-16
      • 2015-05-15
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      相关资源
      最近更新 更多