Referência da tabela do sistema de otimização preditiva

Importante

Esta tabela do sistema está em Public Preview.

Nota

Para ter acesso a esta tabela, a sua região deve suportar otimização preditiva. Consulte 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 o layout de dados para obter o máximo desempenho e eficiência de custos. A tabela do sistema rastreia o histórico de operações desse recurso. Para obter informações sobre otimização preditiva, consulte Otimização preditiva para tabelas geridas pelo Unity Catalog.

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

Considerações sobre a entrega

  • A tabela do sistema de otimização preditiva atualiza-se dentro de duas horas. No entanto, a informação de faturação pode demorar até 24 horas a ser refletida nos dados.
  • A otimização preditiva pode executar várias operações no mesmo cluster. Em caso afirmativo, a percentagem de DBU atribuída a cada uma das operações múltiplas é aproximada. É por isso que o usage_unit está configurado para ESTIMATED_DBU. Ainda assim, o número total de DBUs gastos no cluster será preciso.

Esquema de 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 (de caracteres) O ID da conta. 11e22ba4-87b9-4cc2-9770-d10b894b7118
workspace_id cadeia (de caracteres) A ID do espaço de trabalho no qual a otimização preditiva executou a operação. 1234567890123456
start_time carimbo de data/hora A hora em que a operação começou. 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 O momento 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 (de caracteres) O nome do metastore ao qual a tabela otimizada pertence. metastore
metastore_id cadeia (de caracteres) A ID do metastore ao qual a tabela otimizada pertence. 5a31ba44-bbf4-4174-bf33-e1fa078e6765
catalog_name cadeia (de caracteres) O nome do catálogo ao qual a tabela otimizada pertence. catalog
schema_name cadeia (de caracteres) O nome do esquema ao qual a tabela otimizada pertence. schema
table_id cadeia (de caracteres) O ID da tabela otimizada. 138ebb4b-3757-41bb-9e18-52b38d3d2836
table_name cadeia (de caracteres) O nome da tabela otimizada. table1
operation_type cadeia (de caracteres) A operação de otimização foi realizada. Deve ser um dos seguintes valores: COMPACTION, VACUUM, ANALYZE, CLUSTERINGAUTO_CLUSTERING_COLUMN_SELECTION, DATA_SKIPPING_COLUMN_SELECTION, COMPATIBILITY_MODE_REFRESH, , DELETE, , ou PURGE. COMPACTION
operation_id cadeia (de caracteres) O ID da operação de otimização. 4dad1136-6a8f-418f-8234-6855cfaff18f
operation_status cadeia (de caracteres) O status da operação de otimização. Deve ser um dos seguintes valores: SUCCESSFUL, FAILED: INTERNAL_ERROR, FAILED: AUTO_TTL_COLUMN_DOES_NOT_EXIST_ERROR, ou FAILED: PRIVATE_LINK_SETUP_ERROR. 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 (de caracteres) A unidade de utilização incorrida. Deve ser o seguinte valor: ESTIMATED_DBU. ESTIMATED_DBU
usage_quantity decimal A quantidade da unidade de utilização utilizada. 2.12

Métricas de operação

As métricas registradas na coluna operation_metrics variam dependendo do 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 otimizando o tamanho dos arquivos. Consulte Otimizar o formato do arquivo de dados. number_of_compacted_files O número de ficheiros removidos.
amount_of_data_compacted_bytes O número de bytes removidos.
number_of_output_files O número de ficheiros novos adicionados.
amount_of_output_data_bytes O número de bytes adicionados.
VACUUM Reduz os custos de armazenamento excluindo arquivos de dados que não são mais referenciados pela tabela. Consulte Remover arquivos de dados não utilizados com vácuo. number_of_deleted_files O número de ficheiros recolhidos como lixo.
amount_of_data_deleted_bytes O número de bytes recolhidos como lixo.
ANALYZE Aciona a atualização incremental de estatísticas para melhorar o desempenho da consulta. Consulte ANALYZE TABLE … CALCULAR ESTATÍSTICAS. amount_of_scanned_bytes O número de bytes digitalizados.
number_of_scanned_files O número de ficheiros digitalizados.
staleness_percentage_reduced A redução da percentagem de estagnação. Esta estatística pode variar de 0 a 100, dependendo da frequência executada ANALYZE .
CLUSTERING Desencadeia a clusterização incremental para tabelas habilitadas. Veja Utilizar clustering líquido para tabelas. number_of_removed_files O número de ficheiros removidos.
number_of_clustered_files O número de ficheiros 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 desenvolver colunas de agrupamento. Consulte Agrupamento automático de líquidos. old_clustering_columns O layout anterior dos dados, que pode ser chaves antigas de clustering ou "Nenhuma" se não for 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 alteração no agrupamento das colunas.
DATA_SKIPPING_COLUMN_SELECTION Deteta colunas com dados em falta, ignorando as estatísticas da carga de trabalho, e preenche-as. Ver Salto de dados. amount_of_scanned_bytes O número de bytes digitalizados.
number_of_scanned_files O número de ficheiros digitalizados.
added_data_skipping_columns As colunas de saltos de dados adicionadas.
removed_data_skipping_columns As colunas de salto de dados removidas.
old_data_skipping_columns A lista exaustiva anterior de dados a saltar colunas.
new_data_skipping_columns A lista exaustiva atual de dados que saltam colunas.
COMPATIBILITY_MODE_REFRESH Deteta se o Modo de Compatibilidade está desatualizado e atualiza a tabela. Consulte Modo de compatibilidade. N/A As operações de atualização do Modo de Compatibilidade.
DELETE Remove as linhas que já passaram o período de expiração do tempo de vida automática. Consulte Eliminação automática de linhas com TTL automático. number_of_deleted_rows O número de linhas removidas. Isto aconteceu 0 quando nenhuma linha era elegível para eliminação.
amount_of_data_deleted_bytes O número de bytes removidos.
PURGE Reescreve ficheiros de dados para remover fisicamente linhas já eliminadas com vetores de eliminação. Executa antes VACUUM em tabelas com vetores de eliminação ativados. Consulte Eliminação automática de linhas com TTL automático. number_of_purged_rows O número de linhas purgadas. Isto aconteceu 0 quando nenhuma fila era elegível para ser purgada. Consulte Eliminação automática de linhas com TTL automático.

Consultas de exemplo

As seções a seguir incluem consultas de exemplo que você pode usar para obter informações 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:

Quantos DBUs estimados a otimização preditiva usou 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 ETL específico, você pode primeiro encontrar as tabelas nesse pipeline e, em seguida, procurar 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 mais gastou 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á realizando mais 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 tiveram mais bytes aspirados?

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 geridas 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;