【问题标题】:cassandra's copy does not insert a single rowcassandra 的副本不插入单行
【发布时间】:2015-11-23 14:37:45
【问题描述】:

在 cassandra ([cqlsh 5.0.1 | Cassandra 2.2.0 | CQL spec 3.3.0 | Native protocol v4]) 中我创建了下表

create table flotilla.events1 (
    f1 int,
    f2 int,
    f3 int,
    f4 timestamp,
    f5 text,
    f6 text,
    f7 text,
    f8 int,
    f9 text,
    f10 double,
    f11 int,
    primary key (f2, f1)
);

并尝试插入以下数据 (/tmp/b.csv):

f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11
1,751168360,0,'2014-04-01T09:56:13.491','a','G','G',296,'G',242,242
2,751168360,0,'2014-04-01T09:56:13.491','a','G','G',296,'G',8,8
3,751168360,0,'2014-04-01T09:56:13.491','a','G','G',296,'G',0,0
4,751168360,0,'2014-04-01T09:56:13.491','a','G','G',296,'G',1,1
5,751168360,0,'2014-04-01T09:56:13.491','a','G','G',296,'G',0,0
6,751168360,0,'2014-04-01T09:56:13.491','a','G','G',296,'G',0,0
7,751168360,0,'2014-04-01T09:56:13.491','a','A','A',279,'P',2.55,255
8,751168360,0,'2014-04-01T09:56:13.491','a','A','A',279,'P',0,0

使用以下命令:

copy flotilla.events1 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11) from '/tmp/b.csv' with header=true;

卡珊德拉说:

8 rows imported in 0.550 seconds.

当我检查表格时:

SELECT * from flotilla.events1 ;

 f2 | f1 | f10 | f11 | f3 | f4 | f5 | f6 | f7 | f8 | f9
----+----+-----+-----+----+----+----+----+----+----+----

(0 rows)

没有任何错误。什么黑客?

但是,如果我在第一行插入 INSERT INTO:

insert into flotilla.events1 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11) values (1,751168360,0,'2014-04-01T09:56:13.123','a','G','G',296,'G',242,242) ; select * from flotilla.events1;

 f2        | f1 | f10 | f11 | f3 | f4                       | f5 | f6 | f7 | f8  | f9
-----------+----+-----+-----+----+--------------------------+----+----+----+-----+----
 751168360 |  1 | 242 | 242 |  0 | 2014-04-01 09:56:13+0200 |  a |  G |  G | 296 |  G

(1 rows)

什么技巧?

【问题讨论】:

    标签: cassandra cql cqlsh


    【解决方案1】:

    类似于我在一小时前回答这个question 的方式,为了让它工作,我只是从你的 CSV 文件中删除了所有单引号。

    f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11
    1,751168360,0,2014-04-01T09:56:13.491,a,G,G,296,G,242,242
    2,751168360,0,2014-04-01T09:56:13.491,a,G,G,296,G,8,8
    3,751168360,0,2014-04-01T09:56:13.491,a,G,G,296,G,0,0
    4,751168360,0,2014-04-01T09:56:13.491,a,G,G,296,G,1,1
    5,751168360,0,2014-04-01T09:56:13.491,a,G,G,296,G,0,0
    6,751168360,0,2014-04-01T09:56:13.491,a,G,G,296,G,0,0
    7,751168360,0,2014-04-01T09:56:13.491,a,A,A,279,P,2.55,255
    8,751168360,0,2014-04-01T09:56:13.491,a,A,A,279,P,0,0
    

    然后,COPY 命令运行正常:

    aploetz@cqlsh:stackoverflow> COPY events1 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11) FROM '/home/aploetz/cassandra_stack/b.csv' WITH header=true;
    
    8 rows imported in 0.627 seconds.
    aploetz@cqlsh:stackoverflow> SELECT * FROM events1 ;
    
     f2        | f1 | f10  | f11 | f3 | f4                       | f5 | f6 | f7 | f8  | f9
    -----------+----+------+-----+----+--------------------------+----+----+----+-----+----
     751168360 |  1 |  242 | 242 |  0 | 2014-04-01 09:56:13-0500 |  a |  G |  G | 296 |  G
     751168360 |  2 |    8 |   8 |  0 | 2014-04-01 09:56:13-0500 |  a |  G |  G | 296 |  G
     751168360 |  3 |    0 |   0 |  0 | 2014-04-01 09:56:13-0500 |  a |  G |  G | 296 |  G
     751168360 |  4 |    1 |   1 |  0 | 2014-04-01 09:56:13-0500 |  a |  G |  G | 296 |  G
     751168360 |  5 |    0 |   0 |  0 | 2014-04-01 09:56:13-0500 |  a |  G |  G | 296 |  G
     751168360 |  6 |    0 |   0 |  0 | 2014-04-01 09:56:13-0500 |  a |  G |  G | 296 |  G
     751168360 |  7 | 2.55 | 255 |  0 | 2014-04-01 09:56:13-0500 |  a |  A |  A | 279 |  P
     751168360 |  8 |    0 |   0 |  0 | 2014-04-01 09:56:13-0500 |  a |  A |  A | 279 |  P
    
    (8 rows)
    

    删除你的单引号,然后它应该可以工作。

    【讨论】:

      【解决方案2】:

      我发布了一个额外的答案,因为最初的问题是导入此数据(位于压缩的 csv.gz 文件中):

      f1;f2;f3;f4;f5;f6;f7;f8;f9;f10;f11
      1;751168360;0;'2014-04-01T09:56:13.491111';'a';'G';'G';296;'G';242;242
      2;751168360;0;'2014-04-01T09:56:13.491111';'a';'G';'G';296;'G';8;8
      3;751168360;0;'2014-04-01T09:56:13.491111';'a';'G';'G';296;'G';0;0
      4;751168360;0;'2014-04-01T09:56:13.491111';'a';'G';'G';296;'G';1;1
      5;751168360;0;'2014-04-01T09:56:13.491111';'a';'G';'G';296;'G';0;0
      6;751168360;0;'2014-04-01T09:56:13.491111';'a';'G';'G';296;'G';0;0
      7;751168360;0;'2014-04-01T09:56:13.491111';'a';'A';'A';279;'P';2.55;255
      8;751168360;0;'2014-04-01T09:56:13.491111';'a';'A';'A';279;'P';0;0
      

      仔细选择参数(DELIMITER, QUOTE, HEADER)允许导入数据而不会出错:

      zcat /tmp/a.csv.gz | cqlsh -e "copy flotilla.events1 (f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11) from STDIN WITH DELIMITER=';' and QUOTE='''' and header=true;"
      

      但我仍然认为微秒 (.491111) 会导致错误,因为 cassandra 只能处理毫秒

      【讨论】:

        猜你喜欢
        • 2019-04-01
        • 1970-01-01
        • 2015-08-22
        • 2016-10-14
        • 1970-01-01
        • 2019-11-13
        • 2013-08-21
        • 1970-01-01
        • 2023-01-12
        相关资源
        最近更新 更多