Como importar o IMDB database usando csvkit e copy
Iniciar o servidor e instalar dependências básicas
Se você não tem o PostgreSQL rodando na sua máquina você pode usar o Docker:
$ docker run -v imdb:/var/lib/postgresql/data --name imdbpg --rm postgres
Nós vamos precisar também do wget
e python
.
Se você está usando Docker antes de instalar as dependências execute esses comandos:
$ docker exec -it imdbpg bash
# apt-get update
Para instalar as dependências:
# apt-get --yes install wget python-dev python-pip postgresql-server-dev-all
Passo 1: Instalar o csvkit
Instale o csvkit usando o pip
:
# pip install csvkit
Passo 2: Baixe e descompacte os arquivos
Você pode usar uma regex para baixar somente os arquivos com tsv.gz
:
# wget -A "*tsv.gz" --mirror "https://datasets.imdbws.com/"
# gunzip datasets.imdbws.com/*gz
Passo 3: Importe os dados
# su - postgres
$ createdb imdb
$ for file in /datasets.imdbws.com/*tsv
do
table_name=$(basename $file .tsv)
head -n 20 $file | csvsql --no-constraints --table $table_name | sed "s/\(DECIMAL\|BOOLEAN\)/varchar/g" | psql imdb
psql imdb -c "copy \"${table_name}\" from '${file}' delimiter E'\t'"
done
Note que eu substitui o tipo decimal
e boolean
por varchar
, no meu caso eu preciso do banco de dados apenas para olhar os dados e como tive problema com essas colunas eu simplesmente substitui por varchar
. Está longe de ser o ideal, mas para meu caso não tem nenhum problema.
Se você se importa com constraints e os tipos da coluna, você pode analisar os arquivo tsv
por você mesmo ou usar o csvsql
apenas para pegar o schema básico, de qualquer forma a importação é feita com o copy
do PostgreSQL.