导入数据。 COPY&插入Cassandra

时间:2016-05-07 21:47:58

标签: postgresql cassandra

我试图了解不同的关系数据库和NoSQL数据库是如何工作的,以便了解这个或那个数据库的性能行为。 所以昨天我用PostgreSQL创建了一个数据库CSV file data into a PostgreSQL table

同样的例子:Movielens(http://grouplens.org/datasets/movielens/)。我们有电影和收视率。电影有多种类型。我把它们拆分成一个单独的表,因为它是一个很多的关系。还有很多:很多关系,用户也喜欢电影。我需要能够以多种方式查询此表。

现在我想用Cassandra创建相同的数据库。我对我的表进行建模以进行优化以回答特定查询

CREATE TABLE movies (
    movie_id int primary key,
    title text,
    avg_rating decimal,
    total_ratings int,
    genres set<text>
);

# shows all movies for specific genre
CREATE TABLE genre_to_movies (
    genre text,
    movie_id int,
    name text,
    primary key (genre, movie_id)
);

# show the number of movies of specific genre
CREATE TABLE movies_per_genre (
    genre text primary key,
    movies int
);

# shows all ratings for specific movie
CREATE TABLE ratings_by_movie (
    movie_id int,
    user_id int,
    rating decimal,
    ts int,
    primary key(movie_id, user_id)
);

# show all ratings of specific user
CREATE TABLE ratings_by_user (
    user_id int,
    movie_id int,
    rating decimal,
    ts int,
    primary key(user_id, movie_id)
);

我有2个csv文件: movies.csv :movie_id; MOVIE_NAME; GENRE_NAME

1;Toy Story (1995);Animation|Children's|Comedy

ratings.csv :user_id; movie_id;评级,时间戳

1;1193;5;978300760

将数据导入表格的最佳方法是什么? 例如,如何将数据导入到movies.csv中设置的流派?如何分割字符串&#34;动画|儿童&#39;喜剧&#34;? 如果我手动完成:

INSERT INTO movies(movie_id,..., genre) VALUES ('Toy Story (1995)', ...,['Animation','Children's','Comedy'])

但如何为所有电影导入此数据?

能否请您展示COPY&amp; amp;的最佳策略使用此示例/数据库INSERT命令?

2 个答案:

答案 0 :(得分:1)

您需要编写一个小型导入程序来执行此操作。例如,如果您正在使用Python + Pandas,read_csv将执行导入,然后对于每个影片,您可以拆分类型以插入一组文本字段。

我写了一个实用程序来学习Cassandra,称为&#34; cassandra数据集管理器&#34;或CDM。 CDM的第一个导入器是movielens数据集。阅读来源可能对您有所帮助。我建议查看install.py和movielens.helpers:https://github.com/rustyrazorblade/movielens-small

答案 1 :(得分:0)

您可以使用COPY命令从csv文件导入数据

 COPY movies(movie_id, title, genres) FROM 'movie.csv' WITH DELIMITER =';' AND HEADER = TRUE;