現状
日時でデータセットからアクションテーブルへ全件エクスポートしている。
エクスポート時、データセットの件数 < アクションテーブルの件数の時に古いデータが残ってしまう。
質問
データセットからアクションテーブルへエクスポートする際に、基本的にUPSERTで更新される認識ですが、
一旦、アクションテーブルを空にしてからエクスポートしたいのですが、方法はありますでしょうか?
@Hisanari_Maezawa
仕様上は、ジョブフロー内でアクションテーブルの全件削除をすることはできません。
ただし、アクションテーブルのレコードを削除する方法は提供されています。
日次でエクスポートしている場合は、更新対象レコードの expired_at
を次回エクスポート時刻より少し後に常に設定することで、更新対象以外のレコードはジョブ実行後に自動で削除されるようになるかと思います。
一時的に古いレコードが残ってしまうのが問題であれば、レコードに更新日時を含めておき、アクションテーブルクエリやフロントのJavaScriptでフィルタリングをすることで回避することが多いです。
紐付けテーブルでの例ですが、参考までに設定を晒しますと・・
前提
- 毎日一度クエリを回して、データを入れ替えている
設定サンプル
データの抽出Lクエリ
select
item_id,
price,
...
TIMESTAMP_ADD(CURRENT_TIMESTAMP, INTERVAL + 23 HOUR) AS expired_at
「クエリ実行時から23時間後の時間」がセットされたexpired_at
フィールドをセット
ex:
9/5 12時に実行とすると「9/6 11時」の時間がexpired_at
にセットされる
アクションテーブルに日時で取り込むジョブをセット
翌日(上記例でいうと9/6の11時)の同時刻にまた、上記SQLが実行されます。
「expired_at
フィールド」はJOBの実行後に、JOB実行日時よりも古い日時がセットされているROWを削除する仕様になっているため、
UPSERTが走らなかったROWは「expired_at
」が更新されず、実行後に削除されます。
このやり方でしたら「アクションテーブルや紐付けテーブルが一時的に空になる」といったリスクを考えずに実行できるので結構便利です。少し時系列の考え方が難しいですが・・
ぜひご参考ください!
@jumpei_ikegami @masaaki.akiba
ありがとうございます!
ご返信を参考に対応を進めてみたいとおもいます。
またご質問させていただくかもしれませんがよろしくお願いいたします。