csvkit的csvsql命令似乎无法处理包含值列表的列。 还有什么其他工具或技术可以完成这项工作?
要将imdb csv files转换为sql模式, 我尝试使用csvkit中的csvsql命令, 但csvsql似乎忽略了列表值,因为它正在选择一个简单的chararray here
描述了imdb csv格式实际上,当我尝试从中提取架构时 名称.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模式命令:
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
我将在namebasics和title.crew之间用专用的“多对多”“ actor_title”表替换“ knownForTitles”列。
但是任何工具都能自动神奇地处理吗?