DB4AI-Snapshotsは、機械学習トレーニング用データセットのバージョン管理を実現するopenGaussのコア機能です。この仕組みにより、データ前処理(特徴量選択・型変換など)を効率化しつつ、Gitライクな履歴管理が可能になります。生成されたスナップショットはビューと同様に参照できますが、公開後は不変の静的データとして固定され、内容変更には新バージョンの作成が必要です。
スナップショットのライフサイクル管理
スナップショットは以下の3つの状態で管理されます:
- 有効化(Active):通常のモデルトレーニングで利用可能な状態
- 保存(Archived):新規トレーニングには使用せず、過去データによるモデル検証専用
- 削除済み(Purged):完全に削除されシステムから参照不能
注意点として、データ書き換えが制限される「プライベートユーザー」環境や「三権分離モード」では本機能が利用できません。スナップショット作成はCREATE SNAPSHOTコマンドで実行され、デフォルトで有効化状態となります。内部動作モードは以下の2種類が存在します:
- MSS(Materialized Snapshot Storage):元データを物理的に保存
- CSS(Computed Snapshot Storage):差分データのみを保持
モード切り替えはGUCパラメータdb4ai_snapshot_modeで制御可能です。全スナップショットのメタデータはシステムカタログdb4ai.snapshotで管理されます。
実践的な操作手順
以下の例では、顧客データを基にした機械学習用データセット管理を実演します。
-- 顧客情報テーブルの作成と初期データ投入
CREATE TABLE customer_profiles (
user_id INT PRIMARY KEY,
full_name VARCHAR(50),
purchase_count INT
);
INSERT INTO customer_profiles VALUES
(101, 'Tanaka Hiroshi', 15),
(102, 'Sato Ayumi', 8),
(103, 'Suzuki Ken', 22);
-- バージョン0.1のスナップショット作成
CREATE SNAPSHOT training_data@0.1 AS
SELECT * FROM customer_profiles WHERE purchase_count > 5;
-- スナップショットの参照(元テーブル変更後も固定値を保持)
SELECT * FROM training_data@0.1;
user_id | full_name | purchase_count
---------+---------------+----------------
101 | Tanaka Hiroshi| 15
103 | Suzuki Ken | 22
-- 差分ベースの新バージョン作成(0.1を基に追加・削除)
CREATE SNAPSHOT training_data@0.2 FROM @0.1 USING (
INSERT VALUES (104, 'Watanabe Ryo', 12),
DELETE WHERE user_id = 102
);
-- バージョン0.2の内容確認
SELECT * FROM training_data@0.2;
user_id | full_name | purchase_count
---------+---------------+----------------
101 | Tanaka Hiroshi| 15
103 | Suzuki Ken | 22
104 | Watanabe Ryo | 12
-- トレーニング/テストデータの分割生成
SAMPLE SNAPSHOT training_data@0.2
STRATIFY BY purchase_count
AS _train AT RATIO .7,
AS _test AT RATIO .3;
-- 状態管理コマンド例
ARCHIVE SNAPSHOT training_data@0.1; -- 保存状態に移行
PUBLISH SNAPSHOT training_data@0.2; -- 有効化状態に復帰
PURGE SNAPSHOT training_data@0.1; -- 完全削除
システムカタログの活用
スナップショットの状態を確認するには、システムビューdb4ai.snapshotを参照します。
SELECT schema, name, published, archived, created
FROM db4ai.snapshot;
schema | name | published | archived | created
--------+-----------------+-----------+----------+----------------------------
public | training_data@0.2| t | f | 2023-11-15 14:30:22.184521
public | training_data_test@0.2 | f | f | 2023-11-15 14:35:17.928103
主要パラメータ設定
db4ai_snapshot_version_delimiter:バージョン区切り文字(デフォルト@)db4ai_snapshot_version_separator:サブバージョン区切り(デフォルト.)
依存関係のあるスナップショット削除時は、先に子バージョンを削除する必要があります。また、DB4AI名前空間では関数インデックスの作成が制限されています。