Cassandra CQL:CSV插入反转列
我使用的是卡桑德拉3.9 假设我有一个简单的表,声明如下:Cassandra CQL:CSV插入反转列,cassandra,cql,cassandra-3.0,Cassandra,Cql,Cassandra 3.0,我使用的是卡桑德拉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, fiel
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 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的回答,我修改了insert命令如下:
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)
当前,HEADER=true所做的唯一一件事是告诉cqlsh是否忽略第一行 关于datastax的文档在这方面似乎有点误导(我会让他们知道),但是在cqlsh中运行help COPY将提供以下输出:
HEADER=false - whether to ignore the first line
目前,有一个问题正在改进,改为从此标题中读取。可能重复的问题不是此问题的重复。在我的例子中,改变的不是列的顺序,而是列“field2”的内容在列“field3”中,列“field3”的内容在列“field2”中,感谢您的回答。请参阅我对该问题所做的编辑。我观察到的行为似乎与你描述的不相符。