2016-10-01 53 views
0

据我所知,由于Cassandra不支持连接,我们有时需要创建非规格化表。 考虑到我需要的项目名称的顺序给出订单ID内的每一个项目,我创建一个使用一个表:将数据加载到Cassandra非规范化表

CREATE TABLE order (
    order_id int, 
    item_id int, 
    item_name, 
    primary key ((id), item_id) 
); 

我有两个CSV文件,以从,order.csv加载数据和item.csv,其中order.csv包含order_id和item_id,item.csv包含item_id和item_name。

问题是如何将数据从csv文件加载到我创建的表中?我先从订单文件插入数据,它工作正常。当我插入项目时,它会抛出错误说缺少主键。

任何想法如何从不同的输入文件插入数据到非规格化表?谢谢。

+0

感谢您的回复。最后,我编写了一些代码,在导入数据库之前合并两个csv文件。 –

回答

0

有主键的定义笔误,应该是

CREATE TABLE order (
    order_id int, 
    item_id int, 
    item_name, 
    primary key (order_id, item_id) 
); 

是否使用COPY上传的数据?

关于反规范化,取决于您的用例,通常在规范化的模式中,您将有一个表用于订单,另一个用于客户,并与SQL进行连接以同时显示订单和客户的信息;在这种情况下,对于非规范化表格,您将在同一个表格中显示订单和客户信息,这些字段将取决于您将如何使用查询。作为经验法则,在创建表之前,首先需要定义要使用的内容。

0

使用上的辅助索引你item_id应该做的伎俩:

CREATE INDEX idx_item_id ON order (item_id); 

现在,你应该能够查询,如:

SELECT * FROM order WHERE item_id = ?; 

当心指标通常有性能影响,这样你就可以使用它们导入您的数据,并在完成时删除它们。

欲了解更多信息,请参阅Cassandra Index Documentation