Time Machine
BIチームからの要望は、たいてい無茶だ。今回のは極めつけだった。
データの時系列での変化が見たいという。RDBに入った、すでに更新されたデータの、1週間前の状態と今の状態を比較したいと。バッチでも書けと言いたいところだが、更新前のスナップショットを取っていなければバッチも何もない。
MariaDBにSystem Versioningという機能がある。テーブルに宣言しておけば、行が更新されるたびに旧バージョンが自動で残る。過去の状態を見たければFOR SYSTEM_TIME AS OFと時刻を書くだけだ。タイムマシンクエリと呼ばれている。MySQLにもPostgreSQLにもない。MariaDBだけの領域だ。Snowflakeにも似た機能はあるが、RDBMSの世界ではまだ当たり前ではない。
ただし落とし穴がある。有効にした時点より前には遡れない。タイムマシンだが、設置前の過去には戻れない。履歴行はテーブル内に蓄積され続けるから、バックアップは膨れ上がる。自動パージの仕組みはない。カラムの型変更は履歴データとの互換性が必要で、気軽にALTERを流せない。便利な機能には、相応の維持費がかかる。
BIチームに説明した。まずMariaDBへの移行が必要になる。移行が終わってからSystem Versioningを有効にする。つまり1週間前のデータは、最短でも移行完了から1週間後にしか見られない。
沈黙のあと、「毎週ダウンロードします」と言われた。BIチームの横着に巻き込まれた格好だが、同じ横着者として怒りは湧かなかった。