我在尝试从S3复制数据时使用阶段表进行upsert。
我想这样做,因为我希望能够回填数据(或者不仅仅启动一次),而且现在它正在创建重复的行。
我看到一堆回复显示如何执行DELETE from {table} USING {stage_table} WHERE {table.primarykey} = {stage_table.primarykey}
问题是我想用通用功能做到这一点,这意味着..如何以某种方式'自动'访问主键?因为我在许多地方读过的“primarykey”或“primaryKey”不起作用。我猜它只是伪代码。
任何帮助将不胜感激。谢谢!
修改的
这个想法就是像这样执行upsert:
[交易]
connection.execute("CREATE TEMP TABLE {stage_table} (like {table});".format(stage_table=stage_table, table=text(self.table)))
connection.execute(self.clean(self.compile_query(copy)))
connection.execute("DELETE FROM {table} USING {stage_table} WHERE {table}.primarykey = {stage_table}.primarykey;".format(stage_table=stage_table, table=text(self.table)))
connection.execute("INSERT INTO {table} SELECT * FROM {stage_table};".format(stage_table=stage_table, table=text(self.table)))
connection.execute("DROP TABLE {stage_table};".format(stage_table=stage_table))
[结束交易]