スナップショット
スナップショットは、スキーマおよびすべてのデータを含む、プロジェクトのルートブランチの時点の取得です。Lakebase は瞬時にスナップショットを作成し、パフォーマンスへの影響を最小限に抑えます。バックアップまたは復元ポイントとして使用できます。
Lakebaseアプリでスナップショットの作成、復元、管理を行うか、Python SDK、Java SDK、Databricks CLI、またはcurlのスナップショットAPIを使用してプログラムで処理を行うことができます。Terraformでは、Branchを作成してスナップショットから復元できます。複数の方法で操作を実行できる場合は、その手順がtabとしてまとめて表示されます。
2026年6月1日より、Lakebaseのスナップショット ストレージが課金対象となります。「スナップショット ストレージ コスト」を参照してください。
スナップショットを使用する場合
スナップショットは、定期的なバックアップや、スキーマの変更やその他の潜在的に破壊的な操作を行う前に役立ちます。必要に応じて復元できる復元ポイントをすばやく作成する方法を提供します。
スナップショットを手動で作成する
スナップショットは、ある時点でのブランチの状態をキャプチャします。スナップショットはルート ブランチにのみ手動で作成できます。手動スナップショットはプロジェクトごとに 10 個に制限されています (プロジェクトの制限を参照)。プロジェクト内のどのブランチからでもこれらのスナップショットに復元できます。
スナップショットを作成する
スナップショットは即座に作成されるため、スキーマやデータに大きな変更を加える前に役立ちます。
- UI
- Python SDK
- Java SDK
- CLI
- curl
Lakebase アプリでプロジェクトに移動し、branch ナビゲーションで Backup & Restore を選択します。[ スナップショットの作成 ] をクリックして、データの現在の状態をキャプチャします。

create_snapshot 長時間実行されるオペレーションを返します。.wait()を呼び出すと、スナップショットが利用可能になるまでブロックします。結果はSnapshotです。source_branchが必要で、有効期限も必要です。ttl、expire_time、no_expiryのいずれか1つだけを設定してください。source_branch_lsnまたはsource_branch_timeを使用して、特定の時点を任意でピン留めできます。
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.postgres import Snapshot, SnapshotSpec, Duration
w = WorkspaceClient()
snapshot = Snapshot(
spec=SnapshotSpec(
source_branch="projects/my-project/branches/main",
ttl=Duration(seconds=604800), # 7 days
)
)
result = w.postgres.create_snapshot(
parent="projects/my-project",
snapshot=snapshot,
snapshot_id="my-snapshot",
).wait()
print(f"Snapshot created: {result.name}")
import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.postgres.*;
import com.google.protobuf.Duration;
WorkspaceClient w = new WorkspaceClient();
SnapshotSpec spec = new SnapshotSpec()
.setSourceBranch("projects/my-project/branches/main")
.setTtl(Duration.newBuilder().setSeconds(604800L).build()); // 7 days
Snapshot snapshot = new Snapshot().setSpec(spec);
Snapshot result = w.postgres().createSnapshot(
new CreateSnapshotRequest()
.setParent("projects/my-project")
.setSnapshot(snapshot)
.setSnapshotId("my-snapshot")
).waitForCompletion();
System.out.println("Snapshot created: " + result.getName());
snapshot_id はプロジェクトの後の位置引数です。spec は --json 本文にマップされます。
databricks postgres create-snapshot projects/my-project my-snapshot \
--json '{
"spec": {
"source_branch": "projects/my-project/branches/main",
"ttl": "604800s"
}
}'
スナップショットの作成は長期にわたるオペレーションです。リクエストは、完了するまでポーリングするオペレーションを返します。完了したオペレーションは解凍され、Snapshot リソースになります。実際には、スナップショットはすみやかに AVAILABLE になります。
スナップショット仕様には source_branch が必要です。時点と有効期限を次のように設定します。
- 時点 (オプション):
source_branch_lsnまたはsource_branch_timeを設定します(排他的)。両方を省略すると、Branchの現在のヘッドのスナップショットが取得されます。 - 有効期限 (必須):
expire_time(将来の日付である必要があるRFC 3339 Timestamp)、ttl("604800s"などの秒単位の期間)、またはno_expiry: trueのうちのいずれか1つを正確に設定します。
snapshot_idは必須であり、ユーザーが選択するものであり、作成後に変更することはできません。
-
作成リクエストを送信します。
snapshot_idはクエリー文字列に入り、spec はリクエスト本文にマップされます。Bashcurl -X POST "$WORKSPACE/api/2.0/postgres/projects/my-project/snapshots?snapshot_id=my-snapshot" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"spec": {
"source_branch": "projects/my-project/branches/main",
"source_branch_lsn": "16/B374D848",
"ttl": "604800s"
}
}'レスポンスは長期にわたるオペレーションです:
JSON{
"name": "projects/my-project/operations/<operation-id>",
"done": false
} -
doneがtrueになるまで操作をポーリングします。Bashcurl "$WORKSPACE/api/2.0/postgres/projects/my-project/operations/<operation-id>" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq完了すると、オペレーションの
responseがSnapshotに展開されます。JSON{
"name": "projects/my-project/operations/<operation-id>",
"done": true,
"response": {
"@type": "type.googleapis.com/databricks.postgres.v1.Snapshot",
"name": "projects/my-project/snapshots/my-snapshot",
"status": {
"full_size_bytes": "10485760",
"diff_size_bytes": "524288"
}
}
}サイズフィールドは、文字列としてシリアル化された
int64の値です。 -
スナップショットを直接取得して、利用可能であることを確認します。
長期にわたるオペレーションについての詳細情報は、長期にわたるオペレーションをご覧ください。
バックアップスケジュールを作成する
自動スナップショットを定期的に(毎日、毎週、毎月)実行するようにスケジュール設定し、手動による介入なしで一貫したバックアップを確保します。バックアップ スケジュールはブランチごとに構成され、ルート ブランチにのみ適用されます。手動スナップショットの制限 (プロジェクトの制限を参照) は、スケジュールされたスナップショットには適用されません。
バックアップ スケジュールを作成または変更するには:
-
プロジェクトの 「バックアップと復元」 ページで、 「スケジュールの編集」 をクリックして、バックアップ スケジュール構成ダイアログを開きます。

-
次のオプションからスケジュールの頻度を選択します。
- スケジュールなし – 自動スナップショットを無効にします(デフォルト)
- 毎日 – 毎日指定された時間にスナップショットを作成します
- 毎週 – 特定の曜日にスナップショットを作成します
- 月次 – 月の特定の日にスナップショットを作成します

-
選択した頻度に基づいてスケジュールの詳細を構成します。スナップショットを作成する頻度とスナップショットを保持する期間を指定します。
設定が完了すると、スケジュールによって作成されたスナップショットが、自動的に作成されたことを示すラベルとともに 「バックアップと復元」 ページに表示されます。
スナップショットの保持
スナップショットは、保持期間が終了すると自動的に削除されます。スケジュールを編集することで、いつでも保持設定を調整できます。留意点:
- 保持期間を短くすると、スケジュールされたスナップショットがいくつ保持されるかを管理するのに役立ちます。
- 削除されたスナップショットは復元できません
- 手動スナップショットはバックアップスケジュールの保持設定の影響を受けません
スナップショットの取得と一覧表示
Lakebaseアプリの Backup & Restore ページでスナップショットを表示するか、APIを使用してプログラムで取得します。
スナップショットの一覧表示
- UI
- Python SDK
- Java SDK
- CLI
- curl
Lakebaseアプリの Backup & Restore ページでは、スナップショットが日付順に一覧表示され、各スナップショットの日付とサイズが表示されます。スケジュールされたスナップショットは、自動的に作成されたことを示すラベルとともに同じリストに表示されます。
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
for snapshot in w.postgres.list_snapshots(parent="projects/my-project"):
print(f"Snapshot: {snapshot.name}")
import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.postgres.Snapshot;
WorkspaceClient w = new WorkspaceClient();
for (Snapshot snapshot : w.postgres().listSnapshots("projects/my-project")) {
System.out.println("Snapshot: " + snapshot.getName());
}
databricks postgres list-snapshots projects/my-project --output json | jq
プロジェクト内のスナップショットの一覧を表示します。page_size と page_token を使用して結果のページを移動します。空の next_page_token は最後のページを示します。
curl "$WORKSPACE/api/2.0/postgres/projects/my-project/snapshots?page_size=20" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq
{
"snapshots": [{ "name": "projects/my-project/snapshots/my-snapshot" }],
"next_page_token": ""
}
単一のスナップショットを取得する
IDを指定して1つのスナップショットの詳細を取得します。作成や削除とは異なり、getはSnapshotリソースを直接返します(長期にわたるオペレーションではありません)。読み取り時、有効期限はexpire_timeまたはno_expiryとして報告されます。
- Python SDK
- Java SDK
- CLI
- curl
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
snapshot = w.postgres.get_snapshot(name="projects/my-project/snapshots/my-snapshot")
print(f"Snapshot: {snapshot.name}")
print(f"Source branch: {snapshot.status.source_branch}")
print(f"Full size: {snapshot.status.full_size_bytes} bytes")
import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.postgres.Snapshot;
WorkspaceClient w = new WorkspaceClient();
Snapshot snapshot = w.postgres().getSnapshot("projects/my-project/snapshots/my-snapshot");
System.out.println("Snapshot: " + snapshot.getName());
System.out.println("Full size: " + snapshot.getStatus().getFullSizeBytes() + " bytes");
databricks postgres get-snapshot projects/my-project/snapshots/my-snapshot --output json | jq
curl "$WORKSPACE/api/2.0/postgres/projects/my-project/snapshots/my-snapshot" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq
スナップショットからの復元
スナップショットを使用するには、そこから新しいBranchを作成してリストアします。インプレース リストアはありません。現在のBranchは変更されないままで、スナップショット データを使用して 新しいルート Branch が作成されます。
- UI
- Python SDK
- Java SDK
- CLI
- Terraform
- curl
Lakebase アプリの「バックアップと復元」ページで、スナップショットが日付順に一覧表示されます。復元したいスナップショットを探し、 復元 をクリックします。確認ダイアログが表示され、何が行われるかが説明されます。復元は即座に実行され、現在のブランチは変更されず、branch_from_snapshot_ の後にスナップショットの日時が続くような名前で新しいブランチが作成されます。 復元 をクリックして、操作を実行することを確認します。 スナップショットデータで新規ルートブランチが作成されます。 現在のブランチは変更されません。
復元が完了すると、成功メッセージと新しいブランチの ブランチ概要 ページが表示されます。 「新しいブランチに接続して復元されたデータをプレビューする」 というセクションでは、アプリケーションまたはクライアントから接続して復元されたデータを検証できることについて説明しています。

[接続の詳細を取得] をクリックすると、新しいブランチの接続情報 (ブランチ、コンピュート、データベース、ロール、およびコピーできる接続文字列) を含むダイアログが開きます。 ブランチのコンピュートは、開始時に「保留中」と表示される場合があります。 アクティブになると、接続文字列を使用して接続できるようになります。
新しいブランチで実行できるその他の操作:
- データをプレビューします。 アプリケーション構成を変更する前に、新しいブランチの接続詳細を使用してデータを確認し、復元を確認します。「データベースへの接続」を参照してください。
- ブランチの名前を変更します。 ブランチの概要またはブランチ リストから、ブランチにわかりやすい名前を付けます。「ブランチ設定の更新」を参照してください。
- デフォルトとして設定します。 復元されたデータに満足したら、このブランチをプロジェクトのデフォルト ブランチにすることができます。「デフォルトとして設定」を参照してください。
- アプリケーションを新しいブランチにポイントします。 データが正しいことを確認したら、このブランチの接続詳細を使用するようにアプリケーションの接続設定を更新します。
- 以前のブランチを削除するか保持します。 以前使用していたブランチが不要になった場合は削除するか、バックアップとして保持することができます。「ブランチの削除」を参照してください。
新しいブランチとすべてのプロジェクト ブランチはプロジェクトの [ブランチ] ページから管理できます。復元されたブランチは、他のブランチと並んでルート ブランチとして表示されます。
スタンドアロンの復元オペレーションはありません。source_snapshotをスナップショットのリソース名に設定してBranchを作成します。これにより、復元パスを介してBranch作成がルーティングされ、スナップショットのデータを持つ新しいルートBranchが生成されます。source_snapshotはsource_branch、source_branch_lsn、およびsource_branch_timeとは排他的であり、Branchには引き続き有効期限(no_expiry、ttl、またはexpire_time)が必要です。replace_existing: trueをsource_snapshotと一緒に設定すると、既存のターゲット Branchがアップサートされ、べき等な復元が実行されます。
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.postgres import Branch, BranchSpec
w = WorkspaceClient()
branch = Branch(
spec=BranchSpec(
source_snapshot="projects/my-project/snapshots/my-snapshot",
no_expiry=True,
)
)
result = w.postgres.create_branch(
parent="projects/my-project",
branch=branch,
branch_id="restored-branch",
).wait()
print(f"Branch created: {result.name}")
import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.postgres.*;
WorkspaceClient w = new WorkspaceClient();
BranchSpec spec = new BranchSpec()
.setSourceSnapshot("projects/my-project/snapshots/my-snapshot")
.setNoExpiry(true);
Branch branch = new Branch().setSpec(spec);
Branch result = w.postgres().createBranch(
new CreateBranchRequest()
.setParent("projects/my-project")
.setBranch(branch)
.setBranchId("restored-branch")
).waitForCompletion();
System.out.println("Branch created: " + result.getName());
databricks postgres create-branch projects/my-project restored-branch \
--json '{
"spec": {
"source_snapshot": "projects/my-project/snapshots/my-snapshot",
"no_expiry": true
}
}'
spec に source_snapshot が設定された databricks_postgres_branch を宣言することで、スナップショットからリストアします。スナップショットに対する Terraform のサポートはこの復元パスに限定されています — スナップショットを作成、一覧表示、または削除するための Terraform リソースはありません。
resource "databricks_postgres_branch" "restored" {
branch_id = "restored-branch"
parent = "projects/my-project"
spec = {
source_snapshot = "projects/my-project/snapshots/my-snapshot"
no_expiry = true
}
}
単体の復元オペレーションはありません。スナップショットを復元するには、新しい Branch を作成し、branch spec の source_snapshot にスナップショットのリソース名を指定します。これにより、復元パスを介して Branch の作成がルーティングされ、スナップショットのデータを含む新しいルート Branch が生成されます。既存の Branch は変更されません。
source_snapshot は、source_branch、source_branch_lsn、および source_branch_time と相互に排他的です。replace_existing: true を source_snapshot とともに設定すると、既存のターゲット Branchにアップサートされ、べき等なリストアが行われます。参照されるスナップショットは AVAILABLE であり、新しいBranchと同じプロジェクトに属している必要があります。
-
スナップショットからBranchを作成します。
branch_idはクエリー文字列に含まれます:Bashcurl -X POST "$WORKSPACE/api/2.0/postgres/projects/my-project/branches?branch_id=restored-branch" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"spec": {
"source_snapshot": "projects/my-project/snapshots/my-snapshot",
"no_expiry": true
}
}' -
doneがtrueになるまで、返されたオペレーションをポーリングします。完了したオペレーションが展開され、新しいBranchになります。 -
新しいBranchに接続し、アプリケーションを向ける前に復元されたデータを確認します。Create a Branchとデータベースへの接続をご覧ください。
スナップショットの削除
削除されたスナップショットは復元できません。
- UI
- Python SDK
- Java SDK
- CLI
- curl
Lakebase アプリの Backup & Restore ページで、リストからスナップショットを見つけ、その ケバブメニューを開いて Delete snapshot を選択します。
スナップショットの削除は、長期にわたるオペレーションです。完了するまでブロックするには、.wait()を呼び出します。
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
w.postgres.delete_snapshot(name="projects/my-project/snapshots/my-snapshot").wait()
print("Snapshot deleted")
import com.databricks.sdk.WorkspaceClient;
WorkspaceClient w = new WorkspaceClient();
w.postgres().deleteSnapshot("projects/my-project/snapshots/my-snapshot")
.waitForCompletion();
System.out.println("Snapshot deleted");
databricks postgres delete-snapshot projects/my-project/snapshots/my-snapshot
スナップショットの削除は、長期にわたるオペレーションです。リクエストはオペレーションを返します。完了したオペレーションのレスポンスは空です。
curl -X DELETE "$WORKSPACE/api/2.0/postgres/projects/my-project/snapshots/my-snapshot" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq
doneがtrueになるまで、返されたオペレーションをポーリングします。
スナップショットのストレージコスト
2026年6月1日より、Lakebaseのスナップショットストレージは課金対象となります。
請求はスナップショットの種類に基づきます:
- 手動スナップショットはフルスナップショットとして請求されます。
- スケジュールされたスナップショットは、スケジュールの最初のスナップショットではフルスナップショットとして、それ以降のスケジュールされたスナップショットでは増分(デルタ)ストレージとして課金されます。
各スナップショットのサイズは、「バックアップと復元」ページに表示されます。価格の詳細については、Lakebase 価格ページを参照してください。
制限事項
スナップショットAPIには次の制限事項があります:
- スナップショットは不変です。 更新オペレーションはありません。ソース Branch、ポイントインタイムセレクター、有効期限は作成時に固定され、変更できません。
- インプレース復元はできません。 スナップショットから新しいBranchを作成することによってのみ、スナップショットを復元できます。
- 同じプロジェクトで利用可能なスナップショット。 ソーススナップショットは
AVAILABLE状態で、新しいBranchと同じプロジェクトに属している必要があります。 - 相互に排他的なリストア フィールド。 Branch作成リクエストでは、
source_snapshotをsource_branch、Branchの LSN、またはBranchの Timestampと組み合わせることはできません。replace_existingと組み合わせて、既存のターゲット Branchにアップサートできます。 - Terraform. プロバイダーは、
databricks_postgres_branchのsource_snapshot引数を介したスナップショットからのリストアのみをサポートしています。スナップショットの作成、一覧表示、または削除を行うための Terraform リソースはありません。 - ベータ版の可用性。 スナップショットAPIはベータ版で利用可能です。アクセスをリクエストするには、Databricksアカウントチームにお問い合わせください。
関連
- Branches — Lakebase におけるブランチの仕組み
- Lakebase APIガイド — 認証、リソースの命名、および長期にわたるオペレーション