【问题标题】:Import data. COPY & INSERT in Cassandra导入数据。在 Cassandra 中复制和插入
【发布时间】:2016-05-07 21:47:57
【问题描述】:

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

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

现在我想用 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;电影名;流派名称

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

ratings.csv:user_id;电影ID;评分,时间戳

1;1193;5;978300760

将数据导入表的最佳方式是什么? 例如,如何将数据导入到从 movies.csv 设置的流派?如何拆分字符串“动画|儿童|喜剧”? 如果我手动操作:

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

但是如何为所有电影导入这些数据?

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

【问题讨论】:

    标签: postgresql cassandra


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-12-17
        • 2015-04-25
        • 1970-01-01
        • 1970-01-01
        • 2021-03-16
        • 1970-01-01
        • 2021-07-28
        • 2015-08-03
        • 2014-01-03
        相关资源
        最近更新 更多