Monitorare l'utilizzo delle quote di risorse di Unity Catalog
Questo articolo descrive come monitorare l'utilizzo di oggetti a protezione diretta di Unity Catalog soggetti a quote di risorse.
È possibile usare le API delle quote di risorse di Unity Catalog per tenere traccia dell'utilizzo. Anche se alcuni limiti possono essere aumentati su richiesta, altri sono fissi. Per evitare disagi, pianificare in anticipo e contattare il team dell'account di Azure Databricks se si prevede di superare le quote di risorse.
Cosa sono le quote di risorse di Unity Catalog?
Unity Catalog applica le quote di risorse a tutti gli oggetti a protezione diretta gestiti da Unity Catalog. Queste quote sono elencate in Limiti delle risorse. Sono identificati in tale articolo come quote per cleanroom, Delta Sharing, Marketplace e Unity Catalog.
Ogni quota viene definita come un numero di oggetti per ogni oggetto padre (o ambito). Ad esempio, 10.000 tabelle per schema o 1.000.000 di tabelle per metastore.
Eseguire query sull'utilizzo rispetto alle quote di risorse
Per monitorare in modo proattivo l'utilizzo delle quote di risorse, usare le API REST Quote di risorse di Unity Catalog:
GetQuota
recupera l'utilizzo delle quote per un tipo di quota, definito come numero di oggetti figlio per ogni elemento padre, (ad esempio tabelle per metastore).ListQuotas
recupera tutti i valori di quota nel metastore di destinazione, impaginati per impostazione predefinita.
Entrambe le API restituiscono informazioni sotto forma di oggetto quota_info
che contiene i campi seguenti. È anche possibile usare alcuni di questi campi quando si effettua una richiesta usando l'API GetQuota:
parent_securable_type
: Tipo dell'oggetto padre. Ad esempio, per il numero di tabelle per schema, ilparent_securable_type
èschema
.Nota
Per le quote in cui il tipo padre è un modello registrato, impostare
parent_securable_type
sufunction
.parent_full_name:
Nome completo dell'elemento padre quota della quota. Ad esempio, lo schemamain.default
. Se l'elemento padre è un metastore, usare l'ID metastore nella richiesta.quota_name
: nome della quota. Si tratta dell'oggetto figlio (tabella, schema, condivisione e così via) con suffisso-quota
. Ad esempio:table-quota
.quota_count
: conteggio di utilizzo più recente. Ad esempio,33
tabelle per schema.quota_limit
: valore limite della quota al momento del calcolo del conteggio delle quote. Ad esempio,10000
tabelle per schema.last_refreshed_at
: ora dell'ultimo aggiornamento del conteggio delle quote. Viene visualizzato come timestamp del periodo Unix. È possibile convertire il timestamp in un formato leggibile usando strumenti online come Epoch Converter.
L'API ListQuotas
restituisce anche un token di pagina nella risposta se la risposta corrente non restituisce tutti i risultati.
Autenticazione e autorizzazione API
Solo gli amministratori dell'account possono chiamare le API Quote di risorse.
L'amministratore dell'account che chiama le API deve usare l'autenticazione da utente a computer (U2M) OAuth (per utenti o gruppi) o l'autenticazione da computer a computer (M2M) OAuth (se l'amministratore dell'account è un'entità servizio). Consultare Autenticare l'accesso ad Azure Databricks con un account utente usando OAuth (OAuth U2M) o Autenticare l'accesso ad Azure Databricks con un’entità servizio usando OAuth (OAuth M2M). I token di accesso personale (PAT) generati da Databricks sono anche un'opzione, ma non consigliata.
Usare l'API GetQuota per ottenere i valori di utilizzo delle quote per un tipo di quota specifico
Usare l'API GetQuota
per ottenere informazioni sull'utilizzo per una singola quota di risorse, come definito da un'associazione padre-figlio.
Metodo: GET
Percorso: /unity-catalog/resource-quotas/{parent_securable_type}/{parent_full_name}/{quota_name}
Parametri di corpo: per le descrizioni dei parametri, vedere Eseguire query sull'utilizzo delle quote di risorse.
Per il riferimento sull'API, vedere GET /unity-catalog/resource-quotas/.
I conteggi GetQuota
sono precisi entro 30 minuti dall'ultima operazione di creazione eseguita con l'elemento padre della quota. Il conteggio potrebbe non essere aggiornato se sono state eseguite solo operazioni di eliminazione, perché Unity Catalog aggiorna il numero di quote solo durante la creazione delle risorse. La chiamata GetQuota
attiva un aggiornamento del conteggio delle quote se non è aggiornato, ma il trigger è asincrono e i nuovi conteggi potrebbero non essere restituiti nella prima chiamata.
Esempio di richiesta
Esempio di Python che richiede il numero di schemi creati nel catalogo main
nel metastore collegato all'area di lavoro:
import requests
headers = {'Authentication': 'Bearer <OAuthtoken>'}
r = requests.get('https://example-workspace.databricks.com/api/2.1/unity-catalog/resource-quotas/catalog/main/schema-quota', headers=headers)
print(r.text)
Esempio di curl che esegue la stessa operazione:
$ curl -X GET -H "Authentication: Bearer $OAUTH_TOKEN" \
"https://example-workspace.databricks.com/api/2.1/unity-catalog/resource-quotas/catalog/main/schema-quota"
Risposta di esempio
Risposta che mostra 2.691 schemi rispetto al limite di 10.000 schemi per metastore:
{
"quota_info": {
"parent_securable_type": "CATALOG",
"parent_full_name": "main",
"quota_name": "schema-quota",
"quota_count": 2691,
"quota_limit": 10000,
"last_refreshed_at": 1722559381517
}
}
Usare l'API ListQuotas per ottenere i dati di utilizzo per tutti i tipi di quota in un metastore
Usare l'API ListQuotas
per ottenere i dati di utilizzo per tutti i tipi di quota in un metastore.
Metodo: GET
Percorso: /unity-catalog/resource-quotas/all-resource-quotas
Parametri del corpo:
max_results
: numero di risultati da restituire. Il valore massimo è 500. L’impostazione predefinita è 100.page_token
: token di pagina dalla richiesta precedente per recuperare la pagina successiva dei risultati.
Per il riferimento sull'API, vedere GET /unity-catalog/resource-quotas/all-resource-quotas.
A differenza di GetQuotas
, ListQuotas
non ha alcun contratto di servizio sull’aggiornamento dei conteggi. E non attiva gli aggiornamenti del conteggio delle quote. Per ottenere la massima precisione, usare l'API GetQuota
.
Esempio di richiesta
Esempio di Python che richiede il conteggio delle quote per tutti gli oggetti nel metastore collegato all'area di lavoro, specificando 5 risultati da restituire per pagina:
import requests
headers = {'Authentication': 'Bearer <OAuthtoken>'}
next_page = None
max_results = 5
results = []
while True:
payload = {'max_results': max_results, 'page_token': next_page}
r = requests.get(
'https://example-workspace.databricks.com/api/2.1/unity-catalog/resource-quotas/all-resource-quotas', headers=headers, params=payload).json()
results.extend(r["quotas"])
if "next_page_token" not in r: break
next_page = r["next_page_token"]
results
Esempio di curl che esegue la stessa operazione:
$ curl -X GET -H "Authentication: Bearer $OAUTH_TOKEN" \
-d '{"max_results": 5}' "https://example-workspace.databricks.com/api/2.1/unity-catalog/resource-quotas/all-resource-quotas"
Risposta di esempio
Risposta che mostra una pagina di 5 conteggi delle quote:
"quotas":[
{
"parent_securable_type":"CATALOG",
"parent_full_name":"auto_maintenance",
"quota_name":"schema-quota",
"quota_count":15,
"quota_limit":10000,
"last_refreshed_at":1707272498713
},
{
"parent_securable_type":"CATALOG",
"parent_full_name":"demo_icecream",
"quota_name":"schema-quota",
"quota_count":3,
"quota_limit":10000,
"last_refreshed_at":1720789637102
},
{
"parent_securable_type":"CATALOG",
"parent_full_name":"primarycatalog",
"quota_name":"schema-quota",
"quota_count":2,
"quota_limit":10000,
"last_refreshed_at":1720829359520
},
{
"parent_securable_type":"CATALOG",
"parent_full_name":"shared_catalog_azure",
"quota_name":"schema-quota",
"quota_count":670,
"quota_limit":10000,
"last_refreshed_at":1722036080791
},
{
"parent_securable_type":"CATALOG",
"parent_full_name":"cat-test",
"quota_name":"schema-quota",
"quota_count":567,
"quota_limit":10000,
"last_refreshed_at":1704845201239
}
],
"next_page_token":"eyJfX3R2IjoiMCIsInB0IjoiQ2F0YWxvZyIsInBpZCI6IjAwNTAyYTM1LWIzMGQtNDc4YS1hYTIwLTE5MDZkMGVmNzdiNiIsInJ0IjoiU2NoZW1hIn0="