2016-11-20 11 views
3

私はちょうどluigiライブラリを使い始めました。私は定期的にウェブサイトをスクラップし、新しいレコードをPostgresデータベースに挿入しています。 luigiを使用するスクリプトの一部を書き直そうとしているので、"marker table"の使用方法はわかりません。luigiを使ってPostgresテーブルを更新する

ワークフロー

  1. スクレイプデータ
  2. クエリDB新しいデータが古いデータと異なっているかどうかをチェックします。
  3. その場合は、新しいデータを同じテーブルに格納します。

ただし、luigiのpostgres.CopyToTableを使用すると、テーブルがすでに存在する場合、新しいデータは挿入されません。 table_updatesテーブルのinserted列を使用して、新しいデータを挿入する必要があることを理解しておく必要がありますが、そのプロセスがどのようなものかわかりません。

答えて

1

マーカーテーブルはあまり心配する必要はありません。これは、どのタスクがすでに正常に実行されたかを追跡するために使用する内部テーブルです。これを行うために、luigiはあなたの仕事のupdate_idプロパティを使います。あなたが宣言していない場合、ルギはtask_idas shown hereを使用します。そのtask_idは、タスクファミリ名とタスクの最初の3つのパラメータを連結したものです。

ここで重要な点は、タスクのupdate_idプロパティを上書きして、タスクの実行ごとに一意のカスタム文字列を返すことです。

@property 
def update_id(self): 
    return ":".join(self.param1, self.param2, self.param3) 

重要ことで、私はあなたの仕事の出力を変更するパラメータの意味:通常、あなたの仕事の重要なパラメータ、のようなものを使用する必要があります。私はウェブサイトのURLのIDと刻印の日付のようなパラメータを想像しています。データベースのホスト名、ポート、ユーザー名、パスワードなどのパラメータは、これらのタスクのいずれかと同じになるため、重要であると見なされるべきではありません。

テーブルとデータについての詳細を知らないと、そのupdate_id文字列をどのように構築する必要があるのか​​かなりわかりにくいので注意してください。

関連する問題