Monitorar o uso de cotas de recursos do Catálogo do Unity

Este artigo descreve como monitorar o uso de objetos protegíveis do Catálogo do Unity que estão sujeitos a cotas de recursos.

Você pode usar as APIs de cotas de recursos do Catálogo do Unity para acompanhar o uso. É possível solicitar o aumento de alguns limites, enquanto outros são fixos. Para evitar interrupções, planeje com antecedência e entre em contato com a equipe da conta do Azure Databricks se precisar exceder as cotas de recursos.

O que são cotas de recursos do Catálogo do Unity?

O Catálogo do Unity aplica cotas de recursos em todos os objetos protegíveis gerenciados pelo Catálogo do Unity. Essas cotas são listadas em Limites de recursos. Elas são identificadas nesse artigo como cotas para Clean Rooms, Delta Sharing, Marketplace e Catálogo do Unity.

Cada cota é definida como um número de objetos por objeto pai (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 recursos

Para monitorar o uso em relação às cotas de recursos de forma proativa, use as APIs REST de Cotas de Recursos do Catálogo do Unity:

  • GetQuota Recupera o uso da cota para um tipo de cota, definido como o número de objetos filho por pai (por exemplo, tabelas por metastore).
  • ListQuotasRecupera todos os valores de cota no metastore de destino, paginado por padrão.

Ambas as APIs retornam informações na forma de um objeto quota_info que contém os campos a seguir. Você também usa alguns desses campos ao fazer 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 o 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 conta. 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, 33 tabelas por esquema.

  • quota_limit: o valor limite da cota no momento em que a contagem de cotas foi calculada. Por exemplo, 10000 tabelas 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 online como o Epoch Converter.

A API ListQuotas também retornará um token de página na resposta se a resposta atual não retornar todos os resultados.

Autorização e autenticação de API

Somente administradores de conta podem chamar as APIs de cotas de recursos.

O administrador da conta que chama as APIs deve usar a autenticação U2M (usuário para máquina) OAuth (para usuários ou grupos) ou a autenticação M2M (máquina a máquina) OAuth (se o administrador da conta for uma entidade de serviço). Consulte Autenticar o acesso ao Azure Databricks com uma conta de usuário usando OAuth (OAuth U2M) ou Autenticar o acesso ao Azure Databricks com uma entidade de serviço usando OAuth (OAuth M2M). Os PATs (tokens de acesso pessoal) gerados pelo Databricks também são uma opção, mas não são recomendados.

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

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

Método: GET

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

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

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

As contagens GetQuota são precisas até 30 minutos após a última operação de criação executada no pai da cota. A contagem poderá estar desatualizada se apenas operações de exclusão tiverem sido executadas, pois o Catálogo do Unity atualiza a contagem de cotas somente durante a criação do recurso. A chamada GetQuota disparará uma atualização da contagem de cotas se ela estiver desatualizada; no entanto, o gatilho é assíncrono, e novas contagens podem não ser retornadas na primeira chamada.

Exemplo de solicitação

Exemplo de Python que solicita o número de esquemas que foram criados no catálogo main no metastore anexado ao espaço de trabalho:

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 em relação ao 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
  }
}

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

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

Método: GET

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

Parâmetros do corpo:

  • max_results: número de resultados para retornar. O valor máximo é 500. O padrão é 100.
  • page_token: token de página da solicitação anterior para buscar a próxima página de resultados.

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

Ao contrário do GetQuotas, o ListQuotas não tem SLA sobre a atualização das contagens. Também não dispara atualizações de contagem de cotas. Para obter precisão máxima, use a API GetQuota.

Exemplo de solicitação

Exemplo de Python que solicita contagens de cotas para todos os objetos no metastore anexado ao espaço de trabalho, especificando 5 resultados a serem retornados 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 de 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="