Команда csvsql csvkit, похоже, не обрабатывает столбцы, содержащие списки значений.
какой другой инструмент или техника будут делать эту работу?
Готов преобразовать IMDB CSV-файлов в схему SQL,
Я пытался использовать команду csvsql из csvkit,
но csvsql, кажется, игнорирует список значений в том смысле, что он выбирает простой chararray
формат imdb csv описан здесь
практично, когда я пытаюсь извлечь схему из
name.basics.tsv
какой контент выглядит так:
nconst primaryName birthYear deathYear primaryProfession knownForTitles
nm0000001 Fred Astaire 1899 1987 soundtrack,actor,miscellaneous tt0053137,tt0043044,tt0072308,tt0050419
nm0000002 Lauren Bacall 1924 2014 actress,soundtrack tt0038355,tt0037382,tt0117057,tt0071877
nm0000003 Brigitte Bardot 1934 \N actress,soundtrack,producer tt0059956,tt0057345,tt0054452,tt0049189
nm0000004 John Belushi 1949 1982 actor,writer,soundtrack tt0080455,tt0072562,tt0077975,tt0078723
nm0000005 Ingmar Bergman 1918 2007 writer,director,actor tt0069467,tt0083922,tt0050986,tt0050976
с помощью следующей команды:
gunzip -c name.basics.tsv.20190622232803.gz | sed 's/\\N//g' | csvsql -t --blanks -i postgresql --db-schema imdb > name.basics.tsv.20190622232803.sql
В результате получается следующая команда sql schema:
CREATE TABLE stdin (
nconst VARCHAR NOT NULL,
"primaryName" VARCHAR NOT NULL,
"birthYear" VARCHAR NOT NULL,
"deathYear" VARCHAR NOT NULL,
"primaryProfession" VARCHAR NOT NULL,
"knownForTitles" VARCHAR NOT NULL
);
primaryProfession не рассматривается как массив, список или перечисление.
Более того, столбец knownForTitles ссылается на список индексов других таблиц,
Вот
title.crew.tsv:
tconst directors writers
tt0000001 nm0005690
tt0057232 nm0592807,nm0514816 nm1431954
tt0057233 nm2479905 nm0096831,nm0101595,nm1637529
tt0057234 nm0419967 nm0419967,nm0633315
tt0057235 nm0294758 nm0294758,nm0610842,nm0919041
tt0057236 nm0511837 nm0509563,nm0511837
tt0057237 nm0927090 nm0927090
Я бы заменил известный столбец ForTitles выделенной таблицей "actor_title" многие ко многим, между именами и title.crew.
но может ли любой инструмент справиться с этим автоматически?