Treasure Dataに間違ったデータをインポートしてしまったら

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。たごまさゆきです。
Treasure Data Serviceは、手軽に大量のデータを収集・保管できる、大変便利なサービスですね。

さて、Treasure Dataではインポートしたデータに対してHiveQLなどによるクエリ手段が提供されていますが、データ削除をしようとした場合はテーブル単位、またはデータベース単位での削除となります(後述のとおり、テーブル内のレコードの一部を削除する手段もあります)。
もし万が一誤ったデータや重複するデータをインポートしてしまった場合はどうするべきでしょうか。
Treasure Dataはデータの一時保管場所として他にDWHなどがあり、集計はそちらで行う場合はいいのですが、Treasure Data内のデータに対して集計を行うといった場合はそのデータに誤りが含まれていると色々と都合が悪いわけです。

対処方法を考えてみる

誤ったデータをインポートしてしまった場合の対処方法として次の3つを考えてみました。

  • 誤ったデータが対象とならないように集計をする
  • tdコマンドで消す
  • テーブルを作り直す

誤ったデータが対象とならないように集計する

誤ったデータが入ってしまうことを想定して、集計側で誤データを排除します。
ただしそれが可能となるように、あらかじめインポートするデータ自体を工夫しておく必要があります。

tdコマンドで消す

td table:partial_deleteコマンドを使えば、テーブルの一部のレコードを削除することができそうです。

ただし削除対象の指定は1時間単位での時間範囲指定です。うまいことそれで削除できればいいですが、今回のような目的には難しいかもしれません。その他いくつか注意点がありますが詳細はドキュメントを参照してください。

テーブルを作り直す

思い切ったやり方ですが、データ量が少ないのならテーブルを作り直してしまうのも一つの手です。
逆に大量のデータをインポートしているテーブルだと、復旧にはかなり時間がかかるかもしれません。

どれが最適な方法か

社内でも相談してみましたが、こんな回答をもらいました。

頻度次第ではないでしょうか。誤ったデータが入ることが定常的に発生するのであれば、集計時に回避できるような形でデータ登録することが必須になると考えます。 通常発生しないということであれば、やりやすいやり方で復旧すればいいと考えます。

結局は場合によるということですね。

私の場合も滅多にあるわけではないのですが、万が一起きてしまった時のために手段は考えておこうと思います。
すっきりしなくてスミマセン。