亚马逊Redshift UPSERT

时间:2017-08-09 12:16:04

标签: amazon-web-services amazon-s3 amazon-redshift

我在尝试从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))

[结束交易]

0 个答案:

没有答案