我刚开始使用luigi
库。我经常刮网站并将任何新记录插入Postgres数据库。由于我尝试重写部分脚本以使用luigi
,因此我不清楚应该如何使用"marker table"。
工作流:
但是,使用luigi的postgres.CopyToTable
,如果表已经存在,则不会插入新数据。我想我应该使用inserted
表格中的table_updates
列来确定应该插入哪些新数据,但我不清楚这个过程是什么样的,我可以&#39 ;在网上找到任何明确的例子。
答案 0 :(得分:1)
您不必太担心标记表:它是一个内部表,luigi用于跟踪哪个任务已成功执行。为此,luigi使用您任务的update_id
属性。如果你没有宣布一个,那么luigi将使用task_id
as shown here。 task_id是任务系列名称和任务的前三个参数的串联。
这里的关键是覆盖任务的update_id
属性,并返回一个自定义字符串,您知道该字符串对于每次运行任务都是唯一的。通常您应该使用任务的重要参数,例如:
@property
def update_id(self):
return ":".join(self.param1, self.param2, self.param3)
重要我指的是更改任务输出的参数。我想象网站url o id和抓日期等参数。对于任何这些任务,数据库的主机名,端口,用户名或密码等参数都是相同的,因此它们不应被视为重要任务。
请注意,如果没有关于您的表格的详细信息以及您尝试保存的数据非常难以说明您必须如何构建该update_id字符串,那么请小心。