openGaussのDB4AIスナップショット:機械学習向けデータバージョン管理システム

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名前空間では関数インデックスの作成が制限されています。

タグ: DB4AI データバージョニング OpenGauss 機械学習パイプライン SQL拡張

6月9日 18:53 投稿