【发布时间】: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