Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra CQL:CSV插入反转列_Cassandra_Cql_Cassandra 3.0 - Fatal编程技术网

Cassandra CQL:CSV插入反转列

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

我使用的是卡桑德拉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 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”中,感谢您的回答。请参阅我对该问题所做的编辑。我观察到的行为似乎与你描述的不相符。