【问题标题】:Cassandra CQL : CSV insert invert columnsCassandra CQL:CSV插入反转列
【发布时间】:2019-01-27 15:39:13
【问题描述】:

我正在使用 Cassandra 3.9。

假设我有一个简单的表声明如下:

CREATE KEYSPACE data WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 };

CREATE TABLE data.test (
  field1 text,
  time timestamp,
  field2 text,
  field3 text,
  PRIMARY KEY (field1, time, field3)
);

使用 CQL,我想从 csv 文件中插入内容。这是文件的输入样本:

field1,time,field2,field3
"A",2018-01-01T19:55:00.000Z,0.001,"AAA"
"B",2018-01-01T19:55:00.000Z,0.5,"BBB"
"C",2018-01-01T19:55:00.000Z,0.081,"CCC"
"D",2018-01-01T19:55:00.000Z,0.11,"DDD"
"E",2018-01-01T19:55:00.000Z,0.22,"EEE"

然后我使用命令 COPY 将我的数据插入到我的表中:

COPY data.test FROM 'FILEPATH\file.csv' WITH HEADER = TRUE ;

数据被插入到我的表中,但是'field2'和'field3'列的内容被反转了。

cqlsh:data> select * from test;

 field1 | time                            | field3 | field2
--------+---------------------------------+--------+--------
      C | 2018-01-01 04:00:00.000000+0000 |  0.081 |    CCC
      B | 2018-01-01 04:00:00.000000+0000 |    0.5 |    BBB
      A | 2018-01-01 04:00:00.000000+0000 |  0.001 |    AAA
      E | 2018-01-01 04:00:00.000000+0000 |   0.22 |    EEE
      D | 2018-01-01 04:00:00.000000+0000 |   0.11 |    DDD

(5 rows)

我不知道为什么我有这种(奇怪的)行为。我的 CSV 文件的标题是正确的,应该足以正确地放入我的表格中。

编辑:

在 Jan 回答之后,我修改了我的插入命令:

COPY data.test (field1,time,field3,field2) FROM 'FILEPATH\file.csv' WITH HEADER = TRUE ;

但这给了我同样的结果。另一方面,当我按照它们在文件中出现的顺序(而不是主键的顺序)指定列名时,它给了我正确的结果:

cqlsh:data> COPY data.test (field1,time,field2,field3) FROM 'FILEPATH\file.csv' WITH HEADER = TRUE ;

cqlsh:data> select * from test;

 field1 | time                            | field3 | field2
--------+---------------------------------+--------+--------
      C | 2018-01-01 04:00:00.000000+0000 |    CCC |  0.081
      B | 2018-01-01 04:00:00.000000+0000 |    BBB |    0.5
      A | 2018-01-01 04:00:00.000000+0000 |    AAA |  0.001
      E | 2018-01-01 04:00:00.000000+0000 |    EEE |   0.22
      D | 2018-01-01 04:00:00.000000+0000 |    DDD |   0.11

(5 rows)

【问题讨论】:

  • 这不是这个问题的重复。就我而言,更改的不是列的顺序,而是“field2”列的内容在“field3”列中,“field3”列的内容在“field2”列中

标签: cassandra cql cassandra-3.0


【解决方案1】:

目前,HEADER=true 唯一能做的就是告诉 cqlsh 是否忽略第一行。

关于 datastax 的文档在这方面似乎有点误导(我会让他们知道),但是在 cqlsh 中运行 help COPY 会给出以下输出:

HEADER=false            - whether to ignore the first line

目前有一张票可以改进它以从这个标题中读取,而不是可以找到here。

【讨论】:

  • 感谢您的回答。请参阅我对问题所做的编辑。我观察到的行为似乎与您描述的不符。
猜你喜欢
  • 2016-07-06
  • 2017-06-28
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 2012-02-18
相关资源
最近更新 更多