Tabela de referência do sistema de otimização preditiva

Importante

Esta tabela do sistema está em Visualização Pública.

Observação

Para ter acesso a esta tabela, sua região deve dar suporte à otimização preditiva. Confira Regiões do Azure Databricks.

Este artigo descreve o esquema da tabela de histórico de operações de otimização preditiva e fornece consultas de exemplo. A otimização preditiva otimiza seu layout de dados para desempenho de pico e eficiência de custo. A tabela do sistema acompanha o histórico de operações desse recurso. Para obter informações sobre otimização preditiva, consulte Otimização preditiva para tabelas gerenciadas do Catálogo do Unity.

Caminho da tabela: A tabela do sistema está localizada em system.storage.predictive_optimization_operations_history.

Disponibilidade de recordes

Os registros normalmente estão disponíveis em até 12 horas. A entrega de dados para novos espaços de trabalho pode demorar mais do que isso.

Considerações

A otimização preditiva pode executar várias operações no mesmo cluster. Nesse caso, a proporção dos DBUs atribuída a cada uma das múltiplas operações é aproximada. É por isso que o usage_unit está definido como ESTIMATED_DBU. Ainda assim, o número total de DBUs gastas no cluster é preciso.

Esquema da tabela de otimização preditiva

A tabela do sistema de histórico de operações de otimização preditiva usa o seguinte esquema:

Nome da coluna Tipo de dados Descrição Exemplo
account_id cadeia O ID da conta. 11e22ba4-87b9-4cc2-9770-d10b894b7118
workspace_id cadeia A ID do workspace no qual a otimização preditiva executou a operação. 1234567890123456
start_time carimbo de data/hora A hora em que a operação foi iniciada. As informações de fuso horário são registradas no final do valor, com +00:00 representando UTC. 2023-01-09 10:00:00.000+00:00
end_time carimbo de data/hora A hora em que a operação terminou. As informações de fuso horário são registradas no final do valor, com +00:00 representando UTC. 2023-01-09 11:00:00.000+00:00
metastore_name cadeia O nome do metastore ao qual a tabela otimizada pertence. metastore
metastore_id cadeia A ID do metastore ao qual a tabela otimizada pertence. 5a31ba44-bbf4-4174-bf33-e1fa078e6765
catalog_name cadeia O nome do catálogo ao qual a tabela otimizada pertence. catalog
schema_name cadeia O nome do esquema ao qual a tabela otimizada pertence. schema
table_id cadeia O ID da tabela otimizada. Para REFRESH_INDEX, o ID do índice. 138ebb4b-3757-41bb-9e18-52b38d3d2836
table_name cadeia O nome da tabela otimizada. Para REFRESH_INDEX, o nome do índice. table1
operation_type cadeia A operação de otimização executada. Deve ser um dos seguintes valores: COMPACTION, VACUUM, ANALYZE, CLUSTERING, AUTO_CLUSTERING_COLUMN_SELECTION, DATA_SKIPPING_COLUMN_SELECTION, COMPATIBILITY_MODE_REFRESH, DELETE, , PURGE, , ou REFRESH_INDEX. COMPACTION
operation_id cadeia A ID da operação de otimização. 4dad1136-6a8f-418f-8234-6855cfaff18f
operation_status cadeia O status da operação de otimização. Veja valores de status da operação. SUCCESSFUL
operation_metrics map[string, string] Os detalhes adicionais sobre a otimização específica que foi realizada. Consulte Métricas de operação. {"number_of_output_files":"100","number_of_compacted_files":"1000","amount_of_output_data_bytes":"4000","amount_of_data_compacted_bytes":"10000"}
usage_unit cadeia A unidade de uso incorrida. Deve ser o seguinte valor: ESTIMATED_DBU. ESTIMATED_DBU
usage_quantity decimal A quantidade da unidade de uso utilizada. 2.12

Valores de status operacional

A operation_status coluna tem um dos seguintes valores:

  • SUCCESSFUL: A operação foi concluída com sucesso.
  • FAILED: INTERNAL_ERROR: A operação falhou por um motivo que não tem um status mais específico.
  • FAILED: PRIVATE_LINK_SETUP_ERROR: O armazenamento em nuvem da mesa negava acesso à computação serverless, geralmente por causa das configurações do Link Privado ou firewall. Veja Rede de plano de execução sem servidor.
  • FAILED: AUTO_TTL_COLUMN_DOES_NOT_EXIST_ERROR: A coluna de tempo na política de tempo para viver automaticamente não existe na tabela, por exemplo, porque foi retirada ou renomeada. Confira a exclusão automática de linha com tempo de vida útil automático.
  • FAILED: TRANSACTION_CONFLICT_ERROR: A operação entrou em conflito com uma escrita concorrente na tabela. Consulte exceções de conflito.
  • FAILED: CANNOT_MODIFY_APPEND_ONLY_ERROR: O tempo de vida automático não pode excluir linhas porque a propriedade da appendOnly tabela é true. Veja propriedades da tabela.
  • FAILED: DATATYPE_MISMATCH_ERROR: A coluna de tempo na apólice de tempo para o tempo de vida automática tem um tipo de dado diferente de DATE, TIMESTAMP, ou TIMESTAMP_NTZ. Confira a exclusão automática de linha com tempo de vida útil automático.

Métricas de operação

As métricas registradas na operation_metrics coluna variam de acordo com o tipo de operação:

Nome da operação Descrição da operação Métricas de operação Descrição
COMPACTION Melhora o desempenho da consulta ao otimizar os tamanhos dos arquivos. Confira Otimizar o layout do arquivo de dados. number_of_compacted_files O número de arquivos removidos.
amount_of_data_compacted_bytes O número de bytes removidos.
number_of_output_files O número de arquivos novos adicionados.
amount_of_output_data_bytes O número de bytes adicionados.
VACUUM Reduz os custos de armazenamento ao excluir arquivos de dados que não são mais referenciados pela tabela. Confira Remover arquivos de dados não utilizados com o vacuum. number_of_deleted_files O número de arquivos coletados no lixo.
amount_of_data_deleted_bytes O número de bytes coletados como lixo.
ANALYZE Dispara a atualização incremental de estatísticas para melhorar o desempenho da consulta. Veja ANALYZE TABLE ... ESTATÍSTICAS DE COMPUTAÇÃO. amount_of_scanned_bytes O número de bytes escaneados.
number_of_scanned_files O número de arquivos escaneados.
staleness_percentage_reduced A redução na porcentagem de estagnação. Essa estatística pode variar de 0 a 100 dependendo da frequência executada ANALYZE .
CLUSTERING Dispara o clustering incremental nas tabelas habilitadas. Consulte Usar clustering líquido para tabelas. number_of_removed_files O número de arquivos removidos.
number_of_clustered_files O número de arquivos novos adicionados.
amount_of_data_removed_bytes O número de bytes removidos.
amount_of_clustered_data_bytes O número de bytes adicionados.
AUTO_CLUSTERING_COLUMN_SELECTION Avalia se as colunas de clustering devem ser evoluídas. Consulte clusterização automática de líquidos. old_clustering_columns O layout anterior dos dados, que pode ser chaves antigas de clustering ou "Nenhuma" se não particionado.
new_clustering_columns As novas colunas agrupadas.
has_column_selection_changed O indicador de se as colunas de agrupamento mudaram.
additional_reason As razões para a mudança ou ausência de mudança no agrupamento das colunas.
DATA_SKIPPING_COLUMN_SELECTION Detecta colunas com dados ausentes, ignorando as estatísticas da carga de trabalho e preenche as lacunas. Consulte Ignorando dados. amount_of_scanned_bytes O número de bytes escaneados.
number_of_scanned_files O número de arquivos escaneados.
added_data_skipping_columns As colunas de pular dados adicionadas.
removed_data_skipping_columns As colunas de pular dados removidas.
old_data_skipping_columns A lista exaustiva anterior de dados pulando colunas.
new_data_skipping_columns A lista exaustiva atual de dados pulando colunas.
COMPATIBILITY_MODE_REFRESH Detecta se o Modo de Compatibilidade está desatualizado e atualiza a tabela. Consulte o Modo de Compatibilidade. N/A As operações de atualização do Modo de Compatibilidade.
DELETE Remove linhas que já passaram do período de expiração do tempo de vida automático. Confira a exclusão automática de linha com tempo de vida útil automático. number_of_deleted_rows O número de linhas removidas. Isso aconteceu 0 quando nenhuma linha era elegível para exclusão.
amount_of_data_deleted_bytes O número de bytes removidos.
PURGE Reescreve arquivos de dados para remover fisicamente linhas já deletadas com vetores de exclusão. Executa antes VACUUM em tabelas com vetores de exclusão ativados. Confira a exclusão automática de linha com tempo de vida útil automático. number_of_purged_rows O número de linhas eliminadas. Isso aconteceu 0 quando nenhuma linha era elegível para ser purgada. Confira a exclusão automática de linha com tempo de vida útil automático.
REFRESH_INDEX Mantém os índices atualizados com a tabela base. table_name e table_id trazem o nome e o ID do índice. Veja Atualização automática do índice. refresh_type O tipo de atualização que foi executada, como REGULAR (adiciona entradas para novos dados), FULL (também remove entradas para dados deletados), ou PURGE (remove entradas para linhas excluídas pelo tempo de vida automática).
staleness_percentage_reduced A porcentagem das linhas da tabela base cujas entradas de índice essa atualização atualizou. Essa estatística pode variar de 0 a 100.

Consultas de exemplo

As seções a seguir incluem consultas de exemplo que você pode usar para obter insights sobre a tabela do sistema de otimização preditiva. Para que essas consultas funcionem, você precisa substituir os valores de parâmetro por seus próprios valores.

Este artigo inclui as seguintes consultas de exemplo:

Quantas DBUs estimadas têm otimização preditiva usada nos últimos 30 dias?

SELECT SUM(usage_quantity)
  FROM system.storage.predictive_optimization_operations_history
  WHERE
    usage_unit = "ESTIMATED_DBU"
    AND timestampdiff(day, start_time, Now()) < 30;

Para encontrar o mesmo valor para um pipeline específico do ETL, primeiro você pode encontrar as tabelas nesse pipeline e, em seguida, pesquisar as DBUs:

-- Find all full table names for the pipeline:
WITH pipeline_mapping AS (
  SELECT DISTINCT target_table_full_name AS target_table_name
  FROM system.access.table_lineage
  WHERE entity_type = 'PIPELINE' AND entity_id = :pipeline_id
)
-- Select all operations for any table in that pipeline:
SELECT SUM(usage_quantity)
  FROM system.storage.predictive_optimization_operations_history
  WHERE
    CONCAT_WS('.', catalog_name, schema_name, table_name)
      IN ( SELECT target_table_name FROM pipeline_mapping)
    AND usage_unit = "ESTIMATED_DBU"
    AND timestampdiff(day, start_time, Now()) < 30;

Em quais tabelas a otimização preditiva gastou mais nos últimos 30 dias (custo estimado)?

SELECT
  metastore_name,
  catalog_name,
  schema_name,
  table_name,
  SUM(usage_quantity) as totalDbus
FROM system.storage.predictive_optimization_operations_history
WHERE
  usage_unit = "ESTIMATED_DBU"
  AND timestampdiff(day, start_time, Now()) < 30
GROUP BY ALL
ORDER BY totalDbus DESC;

Em quais tabelas a otimização preditiva está executando a maioria das operações?

SELECT
  metastore_name,
  catalog_name,
  schema_name,
  table_name,
  operation_type,
  COUNT(DISTINCT operation_id) as operations
FROM system.storage.predictive_optimization_operations_history
GROUP BY ALL
ORDER BY operations DESC;

Para um determinado catálogo, quantos bytes totais foram compactados?

SELECT
  schema_name,
  table_name,
  SUM(operation_metrics["amount_of_data_compacted_bytes"]) as bytesCompacted
FROM system.storage.predictive_optimization_operations_history
WHERE
  metastore_name = :metastore_name
  AND catalog_name = :catalog_name
  AND operation_type = "COMPACTION"
GROUP BY ALL
ORDER BY bytesCompacted DESC;

Quais tabelas tinham mais bytes removidos?

SELECT
  metastore_name,
  catalog_name,
  schema_name,
  table_name,
  SUM(operation_metrics["amount_of_data_deleted_bytes"]) as bytesVacuumed
FROM system.storage.predictive_optimization_operations_history
WHERE operation_type = "VACUUM"
GROUP BY ALL
ORDER BY bytesVacuumed DESC;

Qual é a taxa de sucesso das operações executadas pela otimização preditiva?

WITH operation_counts AS (
  SELECT
    COUNT(DISTINCT (CASE WHEN operation_status = "SUCCESSFUL" THEN operation_id END)) as successes,
    COUNT(DISTINCT operation_id) as total_operations
  FROM system.storage.predictive_optimization_operations_history
 )
SELECT successes / total_operations as success_rate
FROM operation_counts;