TreasureDataのデータリカバリを考える


不幸な事故により、td-agentでデータを二重に転送してしまった。自分が雑な対応したせいなんですが。

やってしまったものは仕方ないのでリカバリを考える。
treasuredataは指定の条件でレコードを削除ということはできず、1時間ごとのデータ削除である、table:partial_deleteとかいうのがあるっぽいのでこれを使う。

article_impressions テーブルフルバックアップ

td table:export prod_database article_impressions \
   --s3-bucket dump-bucket \
   --prefix article_impressions/20160721 \
   --aws-key-id $AWS_ACCESS_KEY \
   --aws-secret-key $AWS_SECRET_ACCESS_KEY \
   --file-format json.gz

指定期間レコードを重複除去して抽出

SELECT 
  DISTINCT pi.time,
  pi.application_id,
  pi.uuid,
  pi.media_id,
  pi.placement_id,
  pi.article_id,
  pi.url,
  pi.recommend_article_id,
  pi.priority,
  pi.manual_priority,
  pi.referer,
  pi.ua,
  pi.device,
  pi.lang,
  pi.remote_ip_address,
  pi.similarity,
  pi.manual_similarity,
  pi.default,
  pi.table_name,
  pi.__tag
FROM
  article_impressions pi
WHERE
  td_time_range(pi.time,
    '2016-07-16 00:00:00',
    '2016-07-20 17:00:00',
    'JST')
ORDER BY
  pi.time

JST16日00時〜20日17時のデータを削除

td table:partial_delete uzo_production article_impressions \
  --from '2016-07-16 00:00:00 JST' \
  --to '2016-07-20 17:00:00 JST'

抽出データを再インポート

td import:auto \
  --format csv \
  --column-header \
  --time-column time \
  --auto-create uzo_production.article_impressions \
  /Users/tsuruta/77048484.csv

もうやらないように気をつけようと思いつつもばっちりメモ