使用Cassandra loader加载csv时,Cassandra缺少数据

使用Cassandra loader加载csv时,Cassandra缺少数据,cassandra,Cassandra,我在Ubuntu 16.04上使用Cassandra 3.11.3和两个节点。 我将在这里使用的键空间和表是: ## Create a keyspace CREATE KEYSPACE sto WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 } ; ## Create a table CREATE TABLE sto.cartespuce_numligne_date ( numcartese

我在Ubuntu 16.04上使用Cassandra 3.11.3和两个节点。 我将在这里使用的键空间和表是:

## Create a keyspace
CREATE KEYSPACE sto
WITH REPLICATION = { 
'class' : 'SimpleStrategy', 
'replication_factor' : 1 
} ;
## Create a table
CREATE TABLE sto.cartespuce_numligne_date (
numcarteserie text,
codetypetitre int,
typetransaction int,
heuretransaction float,
numservice int,
numligne text,
direction text,
heureligne float,
numjour text,
numarret text,
numbus int,
date date,
PRIMARY KEY (numligne, date) 
) WITH CLUSTERING ORDER BY (date DESC);
我将50000行的小数据集上载到此表

numligne,date,codetypetitre,direction,heureligne,heuretransaction,numarret,numbus,numcarteserie,numjour,numservice,typetransaction
33,2017-12-07,144,Nord,13.88,15.27,2190,808,1229320749340288,1,268,2
749,2017-12-08,144,Nord,6.93,7.35,1459,507,1229320749340288,1,548,1
使用卡桑德拉加载器

我可以使用CQL副本,但这是进一步加载的初步测试,我需要cassandra loader

我加载csv文件data.csv:

cassandra-loader -f data.csv -host my-ip-address -schema "sto.cartespuce_numligne_date(numligne,date,codetypetitre,direction,heureligne,heuretransaction,numarret,numbus,numcarteserie,numjour,numservice,typetransaction)"
处理运行平稳,以以下日志结束:

*** DONE: data.csv  number of lines processed: 50000 (50000 inserted)
但当我用CQL计算行数时:

cqlsh> SELECT COUNT(*) FROM sto.cartespuce_numligne_date;

count
-------
9877
比较特定案例,很明显数据库中缺少数据。我看不出存储的数据和丢失的数据之间有什么区别


如何释放80%的数据?

表的主键是numligne,date

由于根据相同的主键,csv文件中的数据不是唯一的,即使您进行了插入,cassandra也只会更新这些条目

为了给您一个例子,如果在第43行,您有组合332017-12-07,…将插入此项。如果在第2000行有相同的组合,则当运行此插入时,Cassandra将实际执行更新,因为该键已经在数据库中

插入和更新操作都是操作。进一步阅读一些关于和命令的内容

为了避免这种情况,您可以定义另一个主键,这样每一行都有一个唯一的键,或者您可以编写自己的加载程序,使用IF NOT EXISTS进行插入,这样它只在行不存在时插入行(请参阅insert命令的链接,段落Inserting a row only IF NOT EXISTS)

卡桑德拉提供自己的命令,但是

该过程验证主键并更新现有记录


在检查您正在使用的工具的代码后,我可以看到如果不存在则没有使用,因此如果密钥已经存在,它也将更新。

在您的csv源文件中…组合numling-date是唯一的?不,您可以有多行具有相同的组合numling日期。例如,“2002018-01-27”作为键多次出现。表的主键是numlinge,date。由于根据相同的主键,csv文件中的数据不是唯一的,即使您进行了插入,cassandra也只会更新这些条目。为了给您一个例子,如果在第43行,您有组合332017-12-07,…将插入此项。如果在第2000行,您有相同的组合,则在运行此插入时,Cassandra将实际执行更新,因为该键已在数据库中。因此,键的组合必须始终是唯一的。我添加了一些其他变量以确保每行的唯一性,我的数据现在都已加载。谢谢你,霍里亚。