Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Important
La version Lakebase Autoscaling est la dernière de Lakebase, avec l'évolutivité automatique, la mise à l’échelle jusqu'à zéro, la création de branches et la restauration instantanée. Pour connaître les régions prises en charge, consultez disponibilité de la région. Si vous êtes un utilisateur Lakebase Provisionné, consultez Lakebase Provisioned.
Cette page fournit une vue d’ensemble de l’API de mise à l’échelle automatique Lakebase, notamment l’authentification, les points de terminaison disponibles et les modèles courants pour l’utilisation de l’API REST, de l’interface CLI Databricks et des sdk Databricks (Python, Java, Go).
Pour obtenir la référence complète de l’API, consultez la documentation de l’API Postgres.
Important
L’API Postgres Lakebase est en version bêta. Les points de terminaison d’API, les paramètres et les comportements sont susceptibles de changer.
Authentication
L’API de mise à l’échelle automatique Lakebase utilise l’authentification OAuth au niveau de l’espace de travail pour la gestion de l’infrastructure de projet (création de projets, configuration des paramètres, etc.).
Note
Deux types de connectivité : cette API est destinée à la gestion de la plateforme (création de projets, branches, calculs). Pour l’accès à la base de données (connexion aux données de requête) :
- Clients SQL (psql, pgAdmin, DBeaver) : utilisez des jetons OAuth Lakebase ou des mots de passe Postgres. Consultez Authentification.
- API de données (HTTP RESTful) : utilisez des jetons OAuth Lakebase. Consultez l’API de données.
- Pilotes de langage de programmation (psycopg, SQLAlchemy, JDBC) : utilisez des jetons OAuth Lakebase ou des mots de passe Postgres. Consultez le guide de démarrage rapide.
Pour obtenir une explication complète de ces deux couches d’authentification, consultez architecture d’authentification.
Configurer l’authentification
Authentifiez-vous à l’aide de l’interface CLI Databricks :
databricks auth login --host https://your-workspace.cloud.databricks.com
Suivez les invites de navigateur pour vous connecter. L’interface CLI met en cache votre jeton OAuth à l’adresse ~/.databricks/token-cache.json.
Choisissez ensuite votre méthode d’accès :
SDK Python
Le Kit de développement logiciel (SDK) utilise l’authentification unifiée et gère automatiquement les jetons OAuth :
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
SDK Java
Le Kit de développement logiciel (SDK) utilise l’authentification unifiée et gère automatiquement les jetons OAuth :
import com.databricks.sdk.WorkspaceClient;
WorkspaceClient w = new WorkspaceClient();
Interface de ligne de commande (CLI)
Les commandes utilisent automatiquement le jeton mis en cache :
databricks postgres list-projects
friser
Générez un jeton pour les appels d’API directs :
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}"
Les jetons OAuth expirent après une heure. Régénérer en fonction des besoins.
Pour plus d’informations, consultez Autoriser l’accès utilisateur à Databricks avec OAuth.
Points de terminaison disponibles (bêta)
Tous les points de terminaison utilisent le chemin /api/2.0/postgres/de base .
Projets
| Opération | Méthode | Point de terminaison | Documentation |
|---|---|---|---|
| Créer un projet | POST |
/projects |
Créer un projet |
| Mettre à jour le projet | PATCH |
/projects/{project_id} |
paramètres généraux |
| Supprimer le projet | DELETE |
/projects/{project_id} |
Supprimer un projet |
| Obtenir un projet | GET |
/projects/{project_id} |
Obtenir les détails du projet |
| Répertorier les projets | GET |
/projects |
Répertorier les projets |
Branches
| Opération | Méthode | Point de terminaison | Documentation |
|---|---|---|---|
| Créer une branche | POST |
/projects/{project_id}/branches |
Créer une branche |
| Mettre à jour la branche | PATCH |
/projects/{project_id}/branches/{branch_id} |
Mettre à jour les paramètres de branche |
| Supprimer une branche | DELETE |
/projects/{project_id}/branches/{branch_id} |
Supprimer une branche |
| Récupérer une branche | GET |
/projects/{project_id}/branches/{branch_id} |
Afficher les branches |
| Répertorier les branches | GET |
/projects/{project_id}/branches |
Répertorier les branches |
Points de terminaison (calculs et réplicas en lecture)
Dans l’API, un calcul est appelé point de terminaison. Pour obtenir une vue d’ensemble conceptuelle, consultez Calculs et points de terminaison.
Le tableau suivant mappe les concepts de l’interface utilisateur à leurs équivalents d’API :
| Concept d’interface utilisateur | Ressource ou champ d’API | Documentation |
|---|---|---|
| Calcul principal | Point de terminaison avec endpoint_type: ENDPOINT_TYPE_READ_WRITE |
Gérer les calculs |
| Réplica en lecture | Point de terminaison avec endpoint_type: ENDPOINT_TYPE_READ_ONLY |
Gérer les réplicas en lecture |
| Haute disponibilité |
group champ (EndpointGroupSpec) dans la spécification du point de terminaison |
Gérer la haute disponibilité |
| Identificateurs de calcul (UID, Nom de la ressource) |
uid et name (chemin de ressource complet) sur l’objet Endpoint |
Identificateurs de calcul |
Opérations disponibles
| Opération | Méthode | Point de terminaison | Documentation |
|---|---|---|---|
| Création d’un point de terminaison | POST |
/projects/{project_id}/branches/{branch_id}/endpoints |
Créer un réplica en lecture |
| Mettre à jour le point de terminaison | PATCH |
/projects/{project_id}/branches/{branch_id}/endpoints/{endpoint_id} |
Modifier une instance de calcul / Modifier un réplica de lecture / Gérer la haute disponibilité |
| Supprimer le point de terminaison | DELETE |
/projects/{project_id}/branches/{branch_id}/endpoints/{endpoint_id} |
Supprimer un réplicat en lecture |
| Obtenir un point de terminaison | GET |
/projects/{project_id}/branches/{branch_id}/endpoints/{endpoint_id} |
Afficher les calculs |
| Lister les points de terminaison | GET |
/projects/{project_id}/branches/{branch_id}/endpoints |
Afficher les calculs |
Rôles
| Opération | Méthode | Point de terminaison | Documentation |
|---|---|---|---|
| Répertorier les rôles | GET |
/projects/{project_id}/branches/{branch_id}/roles |
Afficher les rôles Postgres |
| Créer un rôle | POST |
/projects/{project_id}/branches/{branch_id}/roles |
Créer un rôle | OAuthCréer un rôle de mot de passe |
| Obtenir un rôle | GET |
/projects/{project_id}/branches/{branch_id}/roles/{role_id} |
Afficher les rôles Postgres |
| Mettre à jour un rôle | PATCH |
/projects/{project_id}/branches/{branch_id}/roles/{role_id} |
Mettre à jour un rôle |
| Supprimer un rôle | DELETE |
/projects/{project_id}/branches/{branch_id}/roles/{role_id} |
Supprimer un rôle |
Catalogues
| Opération | Méthode | Point de terminaison | Documentation |
|---|---|---|---|
| Inscrire une base de données auprès du catalogue Unity | POST |
/catalogs |
Inscrire une base de données |
| Obtenir l'enregistrement du catalogue | GET |
/catalogs/{catalog_id} |
Vérifier l’état de l’inscription |
| Supprimer l’inscription du catalogue | DELETE |
/catalogs/{catalog_id} |
Désinscrire une base de données |
Note
L’inscription et la suppression sont des opérations de longue durée. Interrogez l’opération retournée jusqu’à done: true. Consultez les opérations de longue durée.
La suppression d’une inscription de catalogue ne supprime pas la base de données Postgres sous-jacente.
Tables synchronisées
| Opération | Méthode | Point de terminaison | Documentation |
|---|---|---|---|
| Créer une table synchronisée | POST |
/synced_tables |
Créer une table synchronisée |
| Obtenir une table synchronisée | GET |
/synced_tables/{table_name} |
Vérifier l’état de synchronisation |
| Supprimer la table synchronisée | DELETE |
/synced_tables/{table_name} |
Supprimer une table synchronisée |
Note
Dans le chemin table_name, le format utilisé est catalog.schema.table.
Les opérations de création et de suppression sont des opérations de longue durée. Interrogez l’opération retournée jusqu’à done: true. Consultez les opérations de longue durée.
La suppression d’une table synchronisée supprime uniquement l’inscription du catalogue Unity. Supprimez la table Postgres séparément pour libérer de l’espace.
Informations d’identification de base de données
| Opération | Méthode | Point de terminaison | Documentation |
|---|---|---|---|
| Générer des identifiants de base de données | POST |
/credentials |
Authentification par jeton OAuth |
Opérations
| Opération | Méthode | Point de terminaison | Documentation |
|---|---|---|---|
| Opération de récupération | GET |
/projects/{project_id}/operations/{operation_id} |
Voir l’exemple ci-dessous |
Autorisations
Les autorisations ACL du projet utilisent l’API standard Azure Databricks Permissionsrequest_object_type sur database-projects et request_object_id sur l’ID de votre projet (par exemple, my-app).
| Opération | Méthode | Point de terminaison | Documentation |
|---|---|---|---|
| Obtenir des autorisations de projet | GET |
/api/2.0/permissions/database-projects/{project_id} |
Informations de référence sur l’API Autorisations |
| Mettre à jour les autorisations du projet | PATCH |
/api/2.0/permissions/database-projects/{project_id} |
Informations de référence sur l’API Autorisations |
| Remplacer les autorisations de projet | PUT |
/api/2.0/permissions/database-projects/{project_id} |
Informations de référence sur l’API Autorisations |
Les niveaux d’autorisation pouvant être accordés pour les projets Lakebase sont CAN_USE et CAN_MANAGE.
CAN_CREATE est un niveau hérité et ne peut pas être défini via l’API. Consultez les niveaux d’autorisation.
Pour obtenir des exemples d’utilisation et des équivalents CLI/SDK/Terraform, consultez Accorder des autorisations par programmation.
Opération Obtenir
Vérifiez l’état d’une opération de longue durée par son nom de ressource.
SDK Python
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}")
SDK Java
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());
Interface de ligne de commande (CLI)
L’interface CLI attend automatiquement que les opérations se terminent par défaut. Utilisez --no-wait pour ignorer l’interrogation :
# 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>
friser
# Get operation status
curl -X GET "$WORKSPACE/api/2.0/postgres/projects/my-project/operations/<operation-id>" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq
Format de réponse :
{
"name": "projects/my-project/operations/<operation-id>",
"done": true,
"response": {
"@type": "type.googleapis.com/databricks.postgres.v1.Project",
"name": "projects/my-project",
...
}
}
Champs:
-
done:falseen cours,trueune fois terminé -
response: contient le résultat quanddoneesttrue -
error: contient les détails de l’erreur en cas d’échec de l’opération
Modèles courants
Nommage des ressources
Les ressources suivent un modèle de nommage hiérarchique dans lequel les ressources enfants sont définies par rapport à leur parent.
Les projets utilisent ce format :
projects/{project_id}
Les ressources enfants telles que les opérations sont imbriquées sous leur projet parent :
projects/{project_id}/operations/{operation_id}
Cela signifie que vous avez besoin de l’ID de projet parent pour accéder aux opérations ou à d’autres ressources enfants.
ID de ressource :
Lors de la création de ressources, vous devez fournir un ID de ressource (par exemple my-app) pour le paramètre project_id, branch_id ou endpoint_id. Cet ID fait partie du chemin d’accès aux ressources dans les appels d’API (par projects/my-app/branches/developmentexemple).
Vous pouvez éventuellement fournir une display_name étiquette plus descriptive à votre ressource. Si vous ne spécifiez pas de nom d’affichage, le système utilise votre ID de ressource comme nom d’affichage.
:::tip Recherche de ressources dans l’interface utilisateur
Pour localiser un projet dans l’interface utilisateur Lakebase, recherchez son nom complet dans la liste des projets. Si vous n’avez pas fourni de nom d'affichage personnalisé lors de la création du projet, recherchez votre project_id (par exemple, « my-app »).
:::
Note
Les ID de ressource ne peuvent pas être modifiés après la création.
Exigences:
- Doit comporter 1 à 63 caractères
- Lettres minuscules, chiffres et traits d’union uniquement
- Impossible de démarrer ou de se terminer par un trait d’union
- Exemples :
my-app, ,analytics-dbcustomer-123
Opérations de longue durée (LRO)
Les opérations de création, de mise à jour et de suppression retournent un databricks.longrunning.Operation objet qui fournit un état d’achèvement.
Exemple de réponse d’opération :
{
"name": "projects/my-project/operations/<operation-id>",
"done": false
}
Interroger pour vérifier l'achèvement à l’aide de GetOperation :
SDK Python
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}")
SDK Java
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());
Interface de ligne de commande (CLI)
L’interface CLI attend automatiquement que les opérations se terminent par défaut. Permet --no-wait de retourner immédiatement :
databricks postgres create-project my-project --no-wait \
--json '{"spec": {"pg_version": 17}}'
friser
# Poll the operation
curl "$WORKSPACE/api/2.0/postgres/projects/my-project/operations/<operation-id>" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq '.done'
Vérifiez toutes les quelques secondes jusqu'à ce que done soit true.
Mettre à jour des masques
Les opérations de mise à jour nécessitent un update_mask paramètre spécifiant les champs à modifier. Cela empêche le remplacement accidentel de champs non liés.
Différences de format :
| Méthode | Format | Example |
|---|---|---|
| REST API | Paramètre de requête. | ?update_mask=spec.display_name |
| SDK Python | Objet FieldMask | update_mask=FieldMask(field_mask=["spec.display_name"]) |
| Interface de ligne de commande (CLI) | Argument positionnel | update-project NAME spec.display_name |
Gestion des erreurs
L’API Lakebase retourne des codes d’état HTTP standard.
409 : Opérations en conflit
Lakebase peut retourner une 409 Conflict erreur pour plusieurs raisons :
- Une opération de maintenance interne est en cours sur le projet.
- Le projet a atteint sa limite d’opérations simultanées.
- Vos propres demandes d’API se chevauchent. Par exemple, créer une branche avant que la création d'une branche précédente ne soit terminée.
Signification :
Lakebase planifie parfois des opérations de maintenance sur des projets. Si une demande cliente arrive alors qu’une de ces opérations est en cours, Lakebase rejette la nouvelle demande avec une 409 Conflict erreur. Vous pouvez également obtenir cette réponse lorsque le projet est en capacité ou que vos appels d’API se chevauchent.
Ce comportement est normal. Les clients doivent être prêts à réessayer les demandes lorsque cette erreur se produit.
Que faire :
Relancez la requête. Une fois l’opération interne terminée ou la capacité libérée, Lakebase accepte de nouvelles demandes pour le projet.
Utilisez une interruption exponentielle pour les nouvelles tentatives : attendez un court intervalle avant la première nouvelle tentative, puis doublez l’attente sur chaque tentative suivante. Un intervalle de départ de 100 millisecondes avec un maximum de 30 secondes est une valeur par défaut raisonnable.
SDK Python
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()
)
friser
# 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}}'
Note
Une 409 Conflict requête d’API Lakebase signifie que la demande n’a pas été acceptée, et non qu’elle a été appliquée. Vérifiez toujours l’état de la ressource après une nouvelle tentative réussie en appelant le point de terminaison correspondant GET .