Monitore o uso das cotas do recurso Unity Catalog

Este artigo descreve como monitorar seu uso de objetos protegidos Unity Catalog que estão sujeitos a cotas de recurso.

O senhor pode usar o recurso Unity Catalog quotas APIs para monitorar o uso. Embora alguns limites possam ser aumentados mediante solicitação, outros são fixos. Para evitar a interrupção, planeje com antecedência e entre em contato com a equipe do Databricks account se o senhor prevê exceder suas cotas de recurso.

O que são cotas de recurso Unity Catalog?

Unity Catalog impõe cotas de recurso em todos os objetos protegidos gerenciados por Unity Catalog. Essas cotas estão listadas em limites de recurso. Elas são identificadas nesse artigo como cotas para Clean Rooms, Delta Sharing, marketplace e Unity Catalog.

Cada cota é definida como um número de objetos por objeto principal (ou escopo). Por exemplo, 10.000 tabelas por esquema ou 1.000.000 de tabelas por metastore.

Consultar seu uso em relação às cotas de recurso

Para monitorar o uso das cotas de recurso de forma proativa, use o site Unity Catalog recurso Quotas REST APIs:

  • GetQuota recupera o uso da cota para um tipo de cota, definido como o número de objetos secundários por pai (por exemplo, tabelas por metastore).

  • ListQuotasrecupera todos os valores de cota no metastore de destino, paginados por default.

Ambos os sites APIs retornam informações na forma de um objeto quota_info que contém os seguintes campos. O senhor também usa alguns desses campos quando faz uma solicitação usando a API GetQuota:

  • parent_securable_type: Tipo do objeto pai. Por exemplo, para a contagem de tabelas por esquema, o parent_securable_type é schema.

    Observação

    Para cotas nas quais o tipo pai é um modelo registrado, defina parent_securable_type como function.

  • parent_full_name: Nome completo do pai da cota. Por exemplo, o esquema main.default. Se o pai for um metastore, use o ID do metastore em sua solicitação.

  • quota_name: Nome da cota. Esse é o objeto filho (tabela, esquema, compartilhamento e assim por diante) com o sufixo -quota. Por exemplo, table-quota.

  • quota_count: A contagem de uso mais recente. Por exemplo, tabelas 33 por esquema.

  • quota_limit: o valor limite da cota no momento em que a contagem de cotas foi calculada. Por exemplo, tabelas 10000 por esquema.

  • last_refreshed_at: A última vez que a contagem de cotas foi atualizada. Isso é exibido como um carimbo de data/hora da época Unix. Você pode converter o carimbo de data/hora em um formato legível por humanos usando ferramentas on-line como o Epoch Converter.

O ListQuotas API também retorna uma página de tokens na resposta se a resposta atual não retornar todos os resultados.

Autorização e autenticação de API

Somente os administradores do site account podem chamar o recurso Quotas APIs.

O administrador do account que chama o APIs deve usar a autenticação OAuth user-to-machine (U2M) (para usuários ou grupos) ou a autenticação OAuth machine-to-machine (M2M) (se o administrador do account for uma entidade de serviço). Consulte Autenticar o acesso a Databricks com um usuário account usando OAuth (OAuth U2M) ou Autenticar o acesso a Databricks com uma entidade de serviço usando OAuth (OAuth M2M). Databricks Os PATs (Personal access tokens ) gerados pelo senhor também são uma opção, mas não são recomendados.

Use a API GetQuota para obter valores de uso de cota para um tipo de cota específico

Use o GetQuota API para obter informações de uso de uma única cota de recurso, conforme definido por um par filho-pai.

Método: GET

Caminho: /unity-catalog/resource-quotas/{parent_securable_type}/{parent_full_name}/{quota_name}

Parâmetros do corpo: Para obter as descrições dos parâmetros, consulte Consultar seu uso em relação às cotas de recurso.

Para obter a referência API, consulte GET /unity-catalog/recurso-quotas/.

GetQuota são precisas até 30 minutos após a última operação de criação realizada sob o pai da cota. A contagem pode estar desatualizada se apenas operações de exclusão tiverem sido executadas, pois o Unity Catalog atualiza a contagem de cota apenas durante a criação do recurso. A chamada de GetQuota aciona um refresh da contagem da cota se ela estiver desatualizada; no entanto, o acionamento é assíncrono e as novas contagens podem não ser retornadas na primeira chamada.

Exemplo de solicitação

Python exemplo que solicita o número de esquemas que foram criados no catálogo main no metastore anexado ao workspace:

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)

Exemplo de Curl que faz o mesmo:

$ curl -X GET -H "Authentication: Bearer $OAUTH_TOKEN" \
"https://example-workspace.databricks.com/api/2.1/unity-catalog/resource-quotas/catalog/main/schema-quota"

Exemplo de resposta

Resposta que mostra 2691 esquemas contra o limite de 10.000 esquemas por 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
  }
}

Use a API ListQuotas para obter dados de uso de todos os tipos de cota em um metastore

Use a API ListQuotas para obter dados de uso de todos os tipos de cota em um metastore.

Método: GET

Caminho: /unity-catalog/resource-quotas/all-resource-quotas

Parâmetros corporais:

  • max_results: Número de resultados a serem retornados. O valor máximo é 500. padrão para 100.

  • page_token: Tokens de página da solicitação anterior para buscar a próxima página de resultados.

Para obter a referência API, consulte GET /unity-catalog/recurso-quotas/all-recurso-quotas.

Ao contrário de GetQuotas, ListQuotas não tem SLA sobre o frescor das contagens. Também não aciona a atualização da contagem de cotas. Para obter o máximo de precisão, use a GetQuota API.

Exemplo de solicitação

Python que solicita a contagem de cotas para todos os objetos no metastore anexado ao site workspace, especificando 5 resultados para retornar por página:

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

Exemplo de Curl que faz o mesmo:

$ 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"

Exemplo de resposta

Resposta que mostra uma página com 5 contagens de cotas:

"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="