使用Python将唯一记录批量插入PostgreSQL(每天数百万条记录)
我每天有1000多万条记录要插入Postgres数据库 90%是重复的,只应插入唯一的记录(可在特定列值上进行检查) 由于容量大,批量插入似乎是唯一明智的选择 我正在想办法让它工作 我试过了:使用Python将唯一记录批量插入PostgreSQL(每天数百万条记录),python,pandas,postgresql,sqlalchemy,Python,Pandas,Postgresql,Sqlalchemy,我每天有1000多万条记录要插入Postgres数据库 90%是重复的,只应插入唯一的记录(可在特定列值上进行检查) 由于容量大,批量插入似乎是唯一明智的选择 我正在想办法让它工作 我试过了: SQLAlchemy,但它抛出了一个错误。所以我认为这是不可能的 抛出: IntegrityError: (psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint "..._key"
IntegrityError: (psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint "..._key"
to_sql
没有这种独特的记录功能有没有办法让SQLAlchemy或Pandas做到这一点?解决这个问题有两种常用方法。要在这两者之间做出选择,您需要检查您愿意在哪里花费计算能力,以及额外的网络传输是否会成为一个问题。我们没有足够的信息为你做出判断 选项1:加载到临时表 这个选项基本上就是您描述的。有一个临时表或一个专用于加载的表,该表与目标表的架构相匹配。显然,这应该排除唯一的约束 将批处理的全部内容加载到此表中,完成后,从该表插入目标表。您可以非常轻松地使用标准SQL语句执行所需的任何类型的操作,例如
distinct
,或者它是否是第一条记录,或者其他任何操作
选项2:仅加载唯一值,使用熊猫过滤
Pandas有一个函数,可以将数据帧限制为唯一的条目,并且可以指定要检查的列和要保留的行
df = df.drop_duplicates(subset = ["Age"])
df = df.drop_duplicates(subset = ["Age"])