Share via


Tabela do sistema de eventos do SQL warehouse

Importante

Esse recurso está em uma versão prévia.

Neste artigo, você aprenderá a usar a tabela do sistema de eventos do warehouse para monitorar e gerenciar os SQL warehouses em seus workspaces. Esta tabela registra uma linha para cada vez que um warehouse é iniciado, interrompido, executado e escalado verticalmente. Você pode usar as consultas de exemplo neste artigo com alertas para manter você informado das alterações em seus warehouses.

A tabela do sistema de eventos do warehouse está localizada em system.compute.warehouse_events.

Tipos de evento de warehouse registrados

Essa tabela do sistema registra os seguintes tipos de eventos:

  • SCALED_UP: um novo cluster foi adicionado ao warehouse.
  • SCALED_DOWN: um cluster foi removido do warehouse.
  • STOPPING: o warehouse está em processo de interrupção.
  • RUNNING: o warehouse está ativamente em execução.
  • STARTING: o warehouse está em processo de inicialização.
  • STOPPED: a execução do warehouse parou completamente.

Esquema de eventos do warehouse

A tabela do sistema warehouse_events usa o seguinte esquema:

Nome da coluna Tipo de dados Descrição Exemplo
account_id string A ID de uma conta do Azure Databricks. 7af234db-66d7-4db3-bbf0-956098224879
workspace_id string A ID do workspace em que o warehouse é implantado. 123456789012345
warehouse_id string A ID do SQL warehouse à qual o evento está relacionado. 123456789012345
event_type string O tipo de evento de warehouse. Os valores possíveis são SCALED_UP, SCALED_DOWN, STOPPING, RUNNING, STARTING e STOPPED. SCALED_UP
cluster_count Número inteiro O número de clusters que estão em execução ativamente. 2
event_time timestamp O carimbo de data/hora de quando o evento ocorreu. 2023-07-20T19:13:09.504Z

Consultas de exemplo

As consultas de exemplo a seguir são modelos. Adicione valores que façam sentido para sua organização. Você também pode adicionar alertas a essas consultas como auxílio para se manter informado(a) sobre as alterações em seus warehouses. Confira Criar um alerta.

Use as seguintes consultas de exemplo para obter insights sobre o comportamento do warehouse:

Quais warehouses estão em execução ativamente e por quanto tempo?

Essa consulta identifica quais warehouses estão ativos no momento, juntamente com o tempo de execução deles em horas.

USE CATALOG `system`;

SELECT
we.warehouse_id,
we.event_time,
TIMESTAMPDIFF(MINUTE, we.event_time, CURRENT_TIMESTAMP()) / 60.0 AS running_hours,
we.cluster_count
FROM
compute.warehouse_events we
WHERE
we.event_type = 'RUNNING'
AND NOT EXISTS (
SELECT 1
FROM compute.warehouse_events we2
WHERE we2.warehouse_id = we.warehouse_id
AND we2.event_time > we.event_time
)

Oportunidade de alerta: como administrador de workspace, talvez você queira ser alertado se um warehouse estiver sendo executado por mais tempo do que o esperado. Por exemplo, você pode usar os resultados da consulta para definir uma condição de alerta a ser disparada quando as horas de execução excederem um determinado limite.

Identificar warehouses que permanecem escalados verticalmente por tempo superior ao esperado

Essa consulta identifica quais warehouses estão ativos no momento, juntamente com o tempo de execução deles em horas.

use catalog `system`;

SELECT
   we.warehouse_id,
   we.event_time,
   TIMESTAMPDIFF(MINUTE, we.event_time, CURRENT_TIMESTAMP()) / 60.0 AS upscaled_hours,
   we.cluster_count
FROM
   compute.warehouse_events we
WHERE
   we.event_type = 'SCALED_UP'
   AND we.cluster_count >= 2
   AND NOT EXISTS (
       SELECT 1
       FROM compute.warehouse_events we2
       WHERE we2.warehouse_id = we.warehouse_id
       AND (
           (we2.event_type = 'SCALED_DOWN') OR
           (we2.event_type = 'SCALED_UP' AND we2.cluster_count < 2)
       )
       AND we2.event_time > we.event_time
   )

oportunidade de alerta: alertar sobre essa condição pode ajudar você a monitorar os recursos e os custos. Você pode definir um alerta para quando as horas em escala vertical excederem um determinado limite.

Warehouses que são iniciados pela primeira vez

Essa consulta informa sobre novos warehouses que estão sendo iniciados pela primeira vez.

use catalog `system`;

SELECT
   we.warehouse_id,
   we.event_time,
   we.cluster_count
FROM
   compute.warehouse_events we
WHERE
   (we.event_type = 'STARTING' OR we.event_type = 'RUNNING')
   AND NOT EXISTS (
       SELECT 1
       FROM compute.warehouse_events we2
       WHERE we2.warehouse_id = we.warehouse_id
       AND we2.event_time < we.event_time
   )

Oportunidade de alerta: alertar sobre novos warehouses pode ajudar sua organização a acompanhar a alocação de recursos. Por exemplo, você pode definir um alerta que é disparado sempre que um novo warehouse é iniciado.

Investigar encargos de cobrança

Se você quiser entender especificamente o que um warehouse estava fazendo para gerar encargos de cobrança, essa consulta pode informar as datas exatas e as horas em que o warehouse foi escalado ou reduzido verticalmente, ou iniciado e interrompido.

use catalog `system`;

SELECT
    we.warehouse_id AS warehouse_id,
    we.event_type AS event,
    we.event_time AS event_time,
    we.cluster_count AS cluster_count
FROM
    compute.warehouse_events AS we
WHERE
    we.event_type IN (
        'STARTING', 'RUNNING', 'STOPPING', 'STOPPED',
        'SCALING_UP', 'SCALED_UP', 'SCALING_DOWN', 'SCALED_DOWN'
    )
    AND MONTH(we.event_time) = 7
    AND YEAR(we.event_time) = YEAR(CURRENT_DATE())
    AND we.warehouse_id = '19c9d68652189278'
ORDER BY
    event_time DESC

Quais warehouses não foram usados nos últimos 30 dias?

Essa consulta ajuda você a identificar recursos não utilizados, fornecendo uma oportunidade para otimização de custos.

use catalog `system`;

SELECT
    we.warehouse_id,
    we.event_time,
    we.event_type,
    we.cluster_count
FROM
    compute.warehouse_events AS we
WHERE
    we.warehouse_id IN (
        SELECT DISTINCT
            warehouse_id
        FROM
            compute.warehouse_events
        WHERE
            MONTH(event_time) = 6
            AND YEAR(event_time) = YEAR(CURRENT_DATE())
    )
    AND we.warehouse_id NOT IN (
        SELECT DISTINCT
            warehouse_id
        FROM
            compute.warehouse_events
        WHERE
            MONTH(event_time) = 7
            AND YEAR(event_time) = YEAR(CURRENT_DATE())
    )
ORDER BY
    event_time DESC

Oportunidade de alerta: receber um alerta sobre recursos não utilizados pode ajudar sua organização a otimizar os custos. Por exemplo, você pode definir um alerta disparado quando a consulta detecta um warehouse não utilizado.

Warehouses com mais tempo de atividade em um mês

Essa consulta mostra quais warehouses foram mais usados durante um mês específico. Essa consulta usa julho como exemplo.

use catalog `system`;

SELECT
   warehouse_id,
   SUM(TIMESTAMPDIFF(MINUTE, start_time, end_time)) / 60.0 AS uptime_hours
FROM (
   SELECT
      starting.warehouse_id,
      starting.event_time AS start_time,
      (
         SELECT
            MIN(stopping.event_time)
         FROM
            compute.warehouse_events AS stopping
         WHERE
            stopping.warehouse_id = starting.warehouse_id
            AND stopping.event_type = 'STOPPED'
            AND stopping.event_time > starting.event_time
      ) AS end_time
   FROM
      compute.warehouse_events AS starting
   WHERE
      starting.event_type = 'STARTING'
      AND MONTH(starting.event_time) = 7
      AND YEAR(starting.event_time) = YEAR(CURRENT_DATE())
) AS warehouse_uptime
WHERE
   end_time IS NOT NULL
GROUP BY
   warehouse_id
ORDER BY
   uptime_hours DESC

Oportunidade de alerta: talvez você queira acompanhar os warehouses de alta utilização. Por exemplo, você pode definir um alerta disparado quando as horas de tempo de atividade de um warehouse excedem um limite específico.

Warehouses que passaram mais tempo escalados verticalmente durante o período de um mês

Essa consulta informa sobre os warehouses que passaram um tempo significativo no estado dimensionado verticalmente durante um mês. Essa consulta usa julho como exemplo.

use catalog `system`;

SELECT
   warehouse_id,
   SUM(TIMESTAMPDIFF(MINUTE, upscaled_time, downscaled_time)) / 60.0 AS upscaled_hours
FROM (
   SELECT
      upscaled.warehouse_id,
      upscaled.event_time AS upscaled_time,
      (
         SELECT
            MIN(downscaled.event_time)
         FROM
            compute.warehouse_events AS downscaled
         WHERE
            downscaled.warehouse_id = upscaled.warehouse_id
            AND (downscaled.event_type = 'SCALED_DOWN' OR downscaled.event_type = 'STOPPED')
            AND downscaled.event_time > upscaled.event_time
      ) AS downscaled_time
   FROM
      compute.warehouse_events AS upscaled
   WHERE
      upscaled.event_type = 'SCALED_UP'
      AND upscaled.cluster_count >= 2
      AND MONTH(upscaled.event_time) = 7
      AND YEAR(upscaled.event_time) = YEAR(CURRENT_DATE())
) AS warehouse_upscaled
WHERE
   downscaled_time IS NOT NULL
GROUP BY
   warehouse_id
ORDER BY
   upscaled_hours DESC limit 0;

Oportunidade de alerta: talvez você queira acompanhar os warehouses de alta utilização. Por exemplo, você pode definir um alerta disparado quando as horas de tempo de atividade de um warehouse excedem um limite específico.