Google Apps Script ScriptDB に関する最近の問題により、 ScriptDBに多くの重複レコードが発生しました。
外部システムからデータを取得し、そのデータがまだ存在しない場合は ScriptDB に保存するアプリがあります。しかし、ScriptDB の最近の問題により、存在のチェックが失敗していました。そして、スクリプトは同じデータを継続的に追加していました。重複をクリーンアップするにはどうすればよいでしょうか。各データ レコードの 1 つのコピーだけが必要です。
Google Apps Script ScriptDB に関する最近の問題により、 ScriptDBに多くの重複レコードが発生しました。
外部システムからデータを取得し、そのデータがまだ存在しない場合は ScriptDB に保存するアプリがあります。しかし、ScriptDB の最近の問題により、存在のチェックが失敗していました。そして、スクリプトは同じデータを継続的に追加していました。重複をクリーンアップするにはどうすればよいでしょうか。各データ レコードの 1 つのコピーだけが必要です。
データベース内のエントリに独自の一意の ID を割り当てた場合、複数のエントリを持つ ID を探して、すべての可能な ID を反復処理できます。コード全体を書くつもりはありませんが、大まかな概要は次のとおりです。
1. Generate an array of all possible IDs
2. For each ID in array, query ScriptDB for items with that ID
3. If results.length > 1, remove the extras
4. Goto 2
5. Finish
もちろん、これには数十万件のレコードで 6 分以上かかるため、状態を保存/ロードするためのコードが必要です。ScriptProperties を使用して、現在の配列を保存します。次に、5.5 分に達したかどうかを判断する関数があり、その時点で「最大実行時間の超過」エラーを回避するために停止します。
一意の ID をまだ使用していない場合は、将来これを防ぐために DB 保存関数に追加するロジックがもう少し必要になります。
そのアプリスクリプトのバグのために、多くの bds も再作成する必要がありました。まだ破損している可能性のあるエントリを信頼できないため、bd全体を削除して手動で再作成しました。大きくない場合は、スプレッドシートにダンプして手動で削除し、bd を再作成します。複製だけでなく、同様のオブジェクトが再作成され、後で1つだけが更新される可能性もあります。