2016-05-07 4 views
0

Я пытаюсь выяснить, как работают разные реляционные и NoSQL базы данных, чтобы понять поведение производительности той или иной базы данных. Итак, вчера я создал базу данных с PostgreSQL CSV file data into a PostgreSQL table.Импорт данных. COPY & INSERT в Cassandra

В том же примере: Movielens (http://grouplens.org/datasets/movielens/). У нас есть фильмы и рейтинги. Фильмы имеют несколько жанров. Я разделил их на отдельный стол, так как это соотношение 1: много. Есть много: много отношений, а также пользователей фильмов. Мне нужно иметь возможность запрашивать эту таблицу несколькими способами.

Теперь я хочу создать ту же базу данных с 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? Как я могу разделить строку «Анимация | Детская | Комедия»? Если я сделать это вручную:

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

, но как я могу импортировать эти данные для всех фильмов?

Можете ли вы показать лучшую стратегию для COPY & Команды INSERT с использованием этого примера/базы данных?

ответ

1

Для этого вам нужно написать небольшую импортерную программу. Например, если вы используете Python + Pandas, read_csv будет выполнять импорт, то для каждого фильма вы можете разделить жанры, чтобы вставить набор текстовых полей.

Я написал утилиту, чтобы узнать Cassandra, называемую «диспетчер набора данных cassandra», или CDM. Первым импортером CDM является набор данных movielens. Чтение через источник может помочь вам. Я предлагаю смотреть на install.py и movielens.helpers: https://github.com/rustyrazorblade/movielens-small

0

Вы можете использовать COPY команду для импорта данных из файла CSV

COPY movies(movie_id, title, genres) FROM 'movie.csv' WITH DELIMITER =';' AND HEADER = TRUE; 
Смежные вопросы