GCP Datastoreにうっかり間違えたデータを大量に登録してしまった
幸い、今日(2020/03/24 AM10:00)以降に登録したデータを全て削除すればよいので、GUIからフィルタリングしてチェックボックス全てを選択して削除すればよいかと思ったが、一覧には最大50までしかエンティティが表示されず、何ページあるのかもわからないので絶望的だった
そこで、以下のドキュメントを読んで、Cloud Dataflow
を用いて削除を行うことにした
一括削除と聞いて全件削除と勘違いしていたが、GQLで検索した結果だけを削除することができる
エンティティを一括で削除する必要がある場合は、データ処理ワークフローを開発、実行するためのマネージド サービスである Cloud Dataflow を使用することをおすすめします。Cloud Dataflow では、Cloud Datastore の削除テンプレートを使用して、GQL クエリで選択されたエンティティを削除できます。
だが、そもそもGQLクエリでどうやって日付でフィルタリングするんだというところから始まった
日付でフィルタリングしたGQLクエリ
この辺を読んで、DATETIME(<string>)
を使えばよいことがわかった
GQL Reference | Cloud Datastore Documentation | Google Cloud
実際のクエリ
SELECT * FROM <kind name> WHERE created > DATETIME('2020-03-24T10:00:00.00000+09:00')
Cloud Dataflowを使ったエンティティの一括削除
上のドキュメントを読んでCloud Dataflowを開始した上で、以下の設定を行った
- ジョブ名
delete-entity - リージョンエンドポイント
Datastoreと同じリージョンを選択 - Cloud Dataflow テンプレート
「Cloud Dataflowのエンティティの一括削除」を選択 - GQLクエリ
上記に書いたGQLクエリ - 読み取りたいデータストアプロジェクトID
DatastoreがあるプロジェクトID - 削除したいデータストアプロジェクトID
DatastoreがあるプロジェクトID - 一時的なローケーション
GCSのtmpディレクトリgs://<project-id>.appspot.com/tmp
設定が終わったらジョブを実行
ボタンを押す
しばらくして完了するとこんな感じにジョブ情報と一緒に表示される
CLIからもできるみたいなので、それは今度試してみる