构建一个CSV文件导入到sql中,如何处理关系?

时间:2016-01-27 23:21:35

标签: sql postgresql csv

我有一个非常大的数据集,表A中的每一行都指向表B中的很多行。在生成CSV文件时,我需要以某种方式显示这种关系,但我没有一个基于整数的pkey。 A中的每个项目都有一个唯一的用户名,表B也是如此(即表B有自己唯一的名称)。

如果重要的话,我正在使用Python和Postgres。 另外注意,两个表都是50-100M +行,每行大约8列。

是否有构建此CSV文件的良好策略?

1 个答案:

答案 0 :(得分:2)

您说每行都有一个唯一的名称。如果它们确实是唯一的,那么您可以将它们用作表格的键。您不需要基于整数的键。

例如,文件的路径可以被视为唯一标识符(对于全部位于同一目录/存储库中的文件。)因此,这可能是文件的密钥。

  • 优点:更容易导入。对该文件的所有引用都是人类可读的。
  • 缺点:对该文件的每次引用都使用比整数键更多的数据库空间。如果文件被重命名,它看起来像一个新文件;如果不更改密钥,名称就无法更改。 (虽然有解决方法。)

如果不指定唯一的整数键,导入将更容易。我建议先导入,然后选择添加整数键。

导入:将数据放入CSV文件,每个表一个文件。然后以正确的顺序将它们导入目标数据库。 (如果我理解你的结构正确,第一个就是Repository表,因为Commits和Changes都引用它。)

向现有表添加整数键:向需要整数键的每个表添加自动编号列。所以每个父行现在都有它的原始唯一名称和整数ID。然后,您可以使用SQL命令将子表中的每个父名称替换为相应的内部键,然后在不再需要时删除额外的名称列。