Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Viktigt!
Lakebase Autoscaling är den senaste versionen av Lakebase, med automatisk skalningsberäkning, skalning till noll, förgrening och omedelbar återställning. Information om regioner som stöds finns i Regiontillgänglighet. Om du är en Lakebase Provisioned-användare kan du läsa Lakebase Provisioned.
Den här sidan innehåller en översikt över Lakebase Autoscaling API, inklusive autentisering, tillgängliga slutpunkter och vanliga mönster för att arbeta med REST API, Databricks CLI och Databricks SDK:er (Python, Java, Go).
Fullständig API-referens finns i dokumentationen för Postgres API.
Viktigt!
Lakebase Postgres-API:et finns i Beta. API-slutpunkter, parametrar och beteenden kan komma att ändras.
Authentication
Lakebase Autoscaling-API:et använder OAuth-autentisering på arbetsytenivå för att hantera projektinfrastruktur (skapa projekt, konfigurera inställningar osv.).
Anmärkning
Två typer av anslutningar: Det här API:et är till för plattformshantering (skapa projekt, grenar, beräkningar). För databasåtkomst (ansluter till frågedata):
- SQL-klienter (psql, pgAdmin, DBeaver): Använd Lakebase OAuth-token eller Postgres-lösenord. Se Autentisering.
- Data-API (RESTful HTTP): Använd Lakebase OAuth-token. Se Data-API.
- Programmeringsspråkdrivrutiner (psycopg, SQLAlchemy, JDBC): Använd Lakebase OAuth-token eller Postgres-lösenord. Se Snabbstart.
En fullständig förklaring av dessa två autentiseringslager finns i Autentiseringsarkitektur.
Konfigurera autentisering
Autentisera med Databricks CLI:
databricks auth login --host https://your-workspace.cloud.databricks.com
Följ webbläsarprompterna för att logga in. CLI cachelagrar din OAuth-token på ~/.databricks/token-cache.json.
Välj sedan din åtkomstmetod:
Python SDK
SDK använder enhetlig autentisering och hanterar automatiskt OAuth-token:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
Java SDK
SDK använder enhetlig autentisering och hanterar automatiskt OAuth-token:
import com.databricks.sdk.WorkspaceClient;
WorkspaceClient w = new WorkspaceClient();
Kommandoradsgränssnitt (CLI)
Kommandon använder automatiskt den cachelagrade token:
databricks postgres list-projects
lockig
Generera en token för direkta API-anrop:
export DATABRICKS_TOKEN=$(databricks auth token | jq -r .access_token)
curl -X GET "https://your-workspace.cloud.databricks.com/api/2.0/postgres/projects" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}"
OAuth-token upphör att gälla efter en timme. Återskapa vid behov.
Mer information finns i Auktorisera användaråtkomst till Databricks med OAuth.
Tillgängliga slutpunkter (Beta)
Alla slutpunkter använder bassökvägen /api/2.0/postgres/.
Projekt
| Verksamhet | Metod | Endpoint | Documentation |
|---|---|---|---|
| Skapa projekt | POST |
/projects |
Skapa ett projekt |
| Uppdatera projekt | PATCH |
/projects/{project_id} |
Allmänna inställningar |
| Ta bort projekt | DELETE |
/projects/{project_id} |
Ta bort ett projekt |
| Hämta projekt | GET |
/projects/{project_id} |
Hämta projektinformation |
| Lista projekten | GET |
/projects |
Lista projekt |
Grenar
| Verksamhet | Metod | Endpoint | Documentation |
|---|---|---|---|
| Skapa förgrening | POST |
/projects/{project_id}/branches |
Skapa en gren |
| Uppdatera gren | PATCH |
/projects/{project_id}/branches/{branch_id} |
Uppdatera greninställningar |
| Ta bort gren | DELETE |
/projects/{project_id}/branches/{branch_id} |
Ta bort en gren |
| Hämta gren | GET |
/projects/{project_id}/branches/{branch_id} |
Visa förgreningar |
| Visa en lista över grenar | GET |
/projects/{project_id}/branches |
Visa en lista över grenar |
Slutpunkter (beräknings- och läsrepliker)
I API:et kallas en beräkning för en slutpunkt. En konceptuell översikt finns i Beräkning och slutpunkter.
I följande tabell mappas gränssnittsbegreppen till deras API-motsvarigheter:
| UI-koncept | API-resurs eller -fält | Documentation |
|---|---|---|
| Primär beräkning | Slutpunkt med endpoint_type: ENDPOINT_TYPE_READ_WRITE |
Hantera beräkningar |
| Läs replik | Slutpunkt med endpoint_type: ENDPOINT_TYPE_READ_ONLY |
Hantera läsrepliker |
| Hög tillgänglighet |
group fält (EndpointGroupSpec) på slutpunktsspecifikation |
Hantera hög tillgänglighet |
| Beräkningsidentifierare (UID, resursnamn) |
uid och name (fullständig resurssökväg) i slutpunktsobjektet |
Beräkningsidentifierare |
Tillgängliga åtgärder
| Verksamhet | Metod | Endpoint | Documentation |
|---|---|---|---|
| Skapa slutpunkt | POST |
/projects/{project_id}/branches/{branch_id}/endpoints |
Skapa en läsreplik |
| Uppdatera slutpunkt | PATCH |
/projects/{project_id}/branches/{branch_id}/endpoints/{endpoint_id} |
Redigera en beräkning / Redigera en läsreplik / Hantera hög tillgänglighet |
| Ta bort slutpunkt | DELETE |
/projects/{project_id}/branches/{branch_id}/endpoints/{endpoint_id} |
Ta bort en läsreplik |
| Hämta slutpunkt | GET |
/projects/{project_id}/branches/{branch_id}/endpoints/{endpoint_id} |
Visa beräkningar |
| Lista slutpunkter | GET |
/projects/{project_id}/branches/{branch_id}/endpoints |
Visa beräkningar |
Roller
| Verksamhet | Metod | Endpoint | Documentation |
|---|---|---|---|
| Visa en lista över roller | GET |
/projects/{project_id}/branches/{branch_id}/roles |
Visa Postgres-roller |
| Skapa roll | POST |
/projects/{project_id}/branches/{branch_id}/roles |
Skapa en OAuth-roll | Skapa en lösenordsroll |
| Hämta roll | GET |
/projects/{project_id}/branches/{branch_id}/roles/{role_id} |
Visa Postgres-roller |
| Uppdatera roll | PATCH |
/projects/{project_id}/branches/{branch_id}/roles/{role_id} |
Uppdatera en roll |
| Ta bort roll | DELETE |
/projects/{project_id}/branches/{branch_id}/roles/{role_id} |
Ta bort en roll |
Kataloger
| Verksamhet | Metod | Endpoint | Documentation |
|---|---|---|---|
| Registrera databas med Unity Catalog | POST |
/catalogs |
Registrera en databas |
| Hämta katalogregistrering | GET |
/catalogs/{catalog_id} |
Kontrollera registreringsstatus |
| Ta bort katalogregistrering | DELETE |
/catalogs/{catalog_id} |
Avregistrera en databas |
Anmärkning
Registrera och ta bort är tidskrävande åtgärder. Kontrollera den returnerade åtgärden tills done: true. Se Tidskrävande åtgärder.
Om du tar bort en katalogregistrering tas inte den underliggande Postgres-databasen bort.
Synkroniserade tabeller
| Verksamhet | Metod | Endpoint | Documentation |
|---|---|---|---|
| Skapa synkroniserad tabell | POST |
/synced_tables |
Skapa en synkroniserad tabell |
| Hämta synkroniserad tabell | GET |
/synced_tables/{table_name} |
Kontrollera synkroniseringsstatus |
| Ta bort synkroniserad tabell | DELETE |
/synced_tables/{table_name} |
Ta bort en synkroniserad tabell |
Anmärkning
table_name-sökvägen använder formatet catalog.schema.table.
Skapa och ta bort är tidskrävande åtgärder. Kontrollera den returnerade åtgärden tills done: true. Se Tidskrävande åtgärder.
Om du tar bort en synkroniserad tabell tas endast registreringen av Unity-katalogen bort. Släpp Postgres-tabellen separat för att frigöra utrymme.
Databasautentiseringsuppgifter
| Verksamhet | Metod | Endpoint | Documentation |
|---|---|---|---|
| Generera databasautentiseringsuppgifter | POST |
/credentials |
Autentisering med OAuth-token |
Verksamhet
| Verksamhet | Metod | Endpoint | Documentation |
|---|---|---|---|
| Hämta åtgärd | GET |
/projects/{project_id}/operations/{operation_id} |
Se exemplet nedan |
Behörigheter
Project ACL-behörigheter använder standard Azure Databricks Permissions API, inte bassökvägen /api/2.0/postgres/. Ställ in request_object_type till database-projects och request_object_id till ditt projekt-ID (till exempel my-app).
| Verksamhet | Metod | Endpoint | Documentation |
|---|---|---|---|
| Hämta projektbehörigheter | GET |
/api/2.0/permissions/database-projects/{project_id} |
Api-referens för behörigheter |
| Uppdatera projektbehörigheter | PATCH |
/api/2.0/permissions/database-projects/{project_id} |
Api-referens för behörigheter |
| Ersätt projektbehörigheter | PUT |
/api/2.0/permissions/database-projects/{project_id} |
Api-referens för behörigheter |
Behörighetsnivåer som kan beviljas för Lakebase-projekt är CAN_USE och CAN_MANAGE.
CAN_CREATE är en ärvd nivå och kan inte anges via API:et. Se Behörighetsnivåer.
Användningsexempel och CLI/SDK/Terraform-motsvarigheter finns i Bevilja behörigheter programmatiskt.
Hämta åtgärd
Kontrollera statusen för en tidskrävande åtgärd med dess resursnamn.
Python SDK
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.postgres import Project, ProjectSpec
w = WorkspaceClient()
# Start an operation (example: create project)
operation = w.postgres.create_project(
project=Project(spec=ProjectSpec(pg_version=17)),
project_id="my-project",
)
print(f"Operation started: {operation.name()}")
# Wait for completion
result = operation.wait()
print(f"Operation completed: {result.name}")
Java SDK
import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.postgres.*;
WorkspaceClient w = new WorkspaceClient();
// Start an operation (example: create project)
CreateProjectOperation operation = w.postgres().createProject(
new CreateProjectRequest()
.setProjectId("my-project")
.setProject(new Project()
.setSpec(new ProjectSpec()
.setPgVersion(17L)))
);
System.out.println("Operation started: " + operation.getName());
// Wait for completion
Project result = operation.waitForCompletion();
System.out.println("Operation completed: " + result.getName());
Kommandoradsgränssnitt (CLI)
CLI väntar automatiskt på att åtgärderna ska slutföras som standard. Använd --no-wait för att hoppa över avsökning:
# Create project without waiting
databricks postgres create-project my-project --no-wait \
--json '{"spec": {"pg_version": 17}}'
# Later, check the operation status using the operation name from the response
databricks postgres get-operation projects/my-project/operations/<operation-id>
lockig
# Get operation status
curl -X GET "$WORKSPACE/api/2.0/postgres/projects/my-project/operations/<operation-id>" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq
Svarsformat:
{
"name": "projects/my-project/operations/<operation-id>",
"done": true,
"response": {
"@type": "type.googleapis.com/databricks.postgres.v1.Project",
"name": "projects/my-project",
...
}
}
Fält:
-
done:falseunder tiden som det pågår,truenär den är färdig -
response: Innehåller resultatet närdoneärtrue -
error: Innehåller felinformation om åtgärden misslyckades
Vanliga mönster
Resursnamngivning
Resurser följer ett hierarkiskt namngivningsmönster där underordnade resurser är kopplade till sina överordnade resurser.
Projekt använder det här formatet:
projects/{project_id}
Underordnade resurser, såsom operationer, nästlas under deras överordnade projekt.
projects/{project_id}/operations/{operation_id}
Det innebär att du behöver det överordnade projektets ID för att få åtkomst till operationer eller andra underordnade resurser.
Resurs-ID:n
När du skapar resurser måste du ange ett resurs-ID (till exempel my-app) för parametern project_id, branch_ideller endpoint_id . Det här ID:t blir en del av resurssökvägen i API-anrop (till exempel projects/my-app/branches/development).
Du kan också ange en display_name för att ge resursen en mer beskrivande etikett. Om du inte anger något visningsnamn använder systemet ditt resurs-ID som visningsnamn.
:::tips Hitta resurser i användargränssnittet
Om du vill hitta ett projekt i Lakebase-användargränssnittet letar du efter dess visningsnamn i projektlistan. Om du inte angav något anpassat visningsnamn när du skapade projektet söker du efter din project_id (till exempel "my-app").
:::
Anmärkning
Det går inte att ändra resurs-ID:t när du har skapat dem.
Krav:
- Måste vara 1–63 tecken långt
- Endast gemener, siffror och bindestreck
- Det går inte att starta eller avsluta med ett bindestreck
- Exempel:
my-app,analytics-db,customer-123
Långvariga operationer (LRO)
Åtgärder för att skapa, uppdatera och ta bort returnerar ett databricks.longrunning.Operation objekt som ger en slutförandestatus.
Exempel på åtgärdssvar:
{
"name": "projects/my-project/operations/<operation-id>",
"done": false
}
Polling för komplettering med GetOperation:
Python SDK
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.postgres import Project, ProjectSpec
w = WorkspaceClient()
# Start an operation
operation = w.postgres.create_project(
project=Project(spec=ProjectSpec(pg_version=17)),
project_id="my-project",
)
# Wait for completion
result = operation.wait()
print(f"Operation completed: {result.name}")
Java SDK
import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.postgres.*;
WorkspaceClient w = new WorkspaceClient();
// Start an operation
CreateProjectOperation operation = w.postgres().createProject(
new CreateProjectRequest()
.setProjectId("my-project")
.setProject(new Project()
.setSpec(new ProjectSpec()
.setPgVersion(17L)))
);
// Wait for completion
Project result = operation.waitForCompletion();
System.out.println("Operation completed: " + result.getName());
Kommandoradsgränssnitt (CLI)
CLI väntar automatiskt på att åtgärderna ska slutföras som standard. Använd --no-wait för att returnera omedelbart:
databricks postgres create-project my-project --no-wait \
--json '{"spec": {"pg_version": 17}}'
lockig
# Poll the operation
curl "$WORKSPACE/api/2.0/postgres/projects/my-project/operations/<operation-id>" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq '.done'
Avsök med några sekunders mellanrum tills done är true.
Uppdatera masker
Uppdateringsåtgärder kräver en update_mask parameter som anger vilka fält som ska ändras. Detta förhindrar att orelaterade fält skrivs över av misstag.
Formatera skillnader:
| Metod | Format | Example |
|---|---|---|
| REST API | Frågeparameter | ?update_mask=spec.display_name |
| Python SDK | FieldMask-objekt | update_mask=FieldMask(field_mask=["spec.display_name"]) |
| Kommandoradsgränssnitt (CLI) | Positionsargument | update-project NAME spec.display_name |
Felhantering
Lakebase-API:et returnerar standard-HTTP-statuskoder.
409: Motstridiga åtgärder
Lakebase kan returnera ett 409 Conflict fel av flera orsaker:
- En intern underhållsåtgärd pågår i projektet.
- Projektet har nått gränsen för samtidiga åtgärder.
- Dina egna API-begäranden överlappar varandra. Till exempel, skapa en gren innan en tidigare gren har slutfört sin skapandeprocess.
Vad det betyder:
Lakebase schemalägger ibland underhållsåtgärder för projekt. Om en klientbegäran kommer när en av dessa åtgärder pågår avvisar Lakebase den nya begäran med ett 409 Conflict fel. Du kan också få det svaret när projektet har kapacitet eller om API-anropen överlappar varandra.
Det här beteendet är förväntat. Klienter bör vara beredda att försöka begäranden igen när det här felet inträffar.
Vad du ska göra:
Försök igen med begäran. När den interna åtgärden slutförs eller kapaciteten frigörs accepterar Lakebase nya begäranden för projektet.
Använd exponentiell backoff för återförsök: vänta ett kort intervall innan det första återförsöket och dubbla sedan väntan på varje efterföljande försök. Ett startintervall på 100 millisekunder med högst 30 sekunder är en rimlig standard.
Python SDK
import time
from databricks.sdk import WorkspaceClient
from databricks.sdk.errors import ResourceConflict
from databricks.sdk.service.postgres import Branch, BranchSpec
w = WorkspaceClient()
def retry_on_conflict(fn, max_attempts=5, base_delay=0.1):
"""Retry a Lakebase API call when a conflicting operation is in progress."""
for attempt in range(max_attempts):
try:
return fn()
except ResourceConflict:
if attempt == max_attempts - 1:
raise
wait = base_delay * (2 ** attempt)
print(f"Conflicting operation in progress. Retrying in {wait}s...")
time.sleep(wait)
# Example: create a branch with retry
branch = retry_on_conflict(
lambda: w.postgres.create_branch(
parent="projects/my-project",
branch=Branch(spec=BranchSpec(no_expiry=True)),
branch_id="my-branch",
).wait()
)
lockig
# Retry with exponential backoff on 409 responses
retry_on_conflict() {
local cmd=("$@")
local max_attempts=5
local delay=0.1
local attempt=0
while [ $attempt -lt $max_attempts ]; do
response=$(curl -s -w "\n%{http_code}" "${cmd[@]}")
http_code=$(echo "$response" | tail -n1)
body=$(echo "$response" | sed '$d')
if [ "$http_code" -ne 409 ]; then
echo "$body"
return 0
fi
attempt=$((attempt + 1))
if [ $attempt -eq $max_attempts ]; then
echo "Max retries reached. Last response: $body" >&2
return 1
fi
echo "Conflicting operation in progress. Retrying in ${delay}s..." >&2
sleep "$delay"
delay=$((delay * 2))
done
}
# Example: create a branch with retry
retry_on_conflict \
-X POST "$WORKSPACE/api/2.0/postgres/projects/my-project/branches?branch_id=my-branch" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"spec": {"no_expiry": true}}'
Anmärkning
En 409 Conflict på en Lakebase API-begäran innebär att begäran inte accepterades, inte att den tillämpades. Kontrollera alltid resurstillståndet efter ett lyckat återförsök genom att anropa motsvarande GET slutpunkt.
SDK:er och infrastruktur som kod
- Python SDK
- Java SDK
- Go SDK
- Deklarativa Automationspaket
- Hantera Lakebase-projekt med paket
- Terraform-provider
- Kom igång med Terraform för Lakebase