Particionamento de dados
O que é particionamento de dados?
O particionamento de dados é uma técnica que divide grandes conjuntos de dados em segmentos menores e mais gerenciáveis, chamados de partições. No contexto das integrações ETL zero do AWS Glue, o particionamento organiza seus dados no local de destino com base em valores específicos de coluna ou transformações desses valores.
Benefícios do particionamento de dados
O particionamento de dados eficaz fornece vários benefícios importantes para workloads de analytics:
-
Melhor desempenho de consultas: as consultas podem ignorar partições irrelevantes (poda de partições), reduzindo a quantidade de dados que precisam ser verificados.
-
Custos reduzidos: ao verificar menos dados, você pode reduzir os custos de computação e E/S para suas consultas de analytics.
-
Melhor escalabilidade: o particionamento permite o processamento paralelo de segmentos de dados, possibilitando um escalonamento mais eficiente de workloads de analytics.
-
Gerenciamento simplificado do ciclo de vida dos dados: você pode gerenciar políticas de retenção no nível da partição, facilitando o arquivamento ou a exclusão de dados antigos.
Principais conceitos de particionamento
- Colunas da partição
-
Colunas em seus dados que são usadas para determinar como os registros são organizados em partições. As colunas de partição efetivas devem se alinhar com os padrões de consulta comuns e ter a cardinalidade apropriada.
- Funções da partição
-
Transformações aplicadas aos valores da coluna de partição para criar os limites reais da partição. Os exemplos incluem funções de identidade (usando o valor bruto) e baseadas em tempo (ano, mês, dia, hora).
- Limpeza da partição
-
O processo em que o mecanismo de consulta identifica e ignora partições que não contêm dados relevantes para uma consulta, melhorando significativamente o desempenho.
- Granularidade de partição
-
O nível de detalhe no qual os dados são particionados. Uma granularidade mais fina (mais partições) pode melhorar o desempenho da consulta, mas pode aumentar a sobrecarga de metadados. Uma granularidade mais grossa (menos partições) reduz a sobrecarga de metadados, mas pode resultar na digitalização de mais dados do que o necessário.
Particionamento em integrações ETL zero do AWS Glue
As integrações do ETL zero do AWS Glue usam o formato de tabela Apache Iceberg, que fornece recursos avançados de particionamento. Ao criar uma integração ETL zero, você pode:
-
Use estratégias de particionamento padrão otimizadas para sua fonte de dados
-
Defina especificações personalizadas de particionamento adaptadas aos seus padrões de consulta
-
Aplique transformações às colunas de particionamento (especialmente útil para particionamento baseado em carimbo de data/hora)
-
Combine várias estratégias de particionamento para particionamento em vários níveis
As configurações de particionamento são especificadas por meio da API CreateIntegrationTableProperty
ao configurar sua integração ETL zero. Depois de configurado, o AWS Glue aplica automaticamente essas estratégias de particionamento para organizar seus dados no local de destino.
Referência da API de especificação de partição
Use os seguintes parâmetros na API CreateIntegrationTableProperties para configurar particionamento:
- PartitionSpec
-
Uma matriz de especificações de partição que define como os dados são particionados no local de destino.
{ "partitionSpec": [ { "fieldName": "timestamp_col", "functionSpec": "month", "conversionSpec": "epoch_milli" }, { "fieldName": "category", "functionSpec": "identity" } ] }
- FieldName
-
Uma string UTF-8 (de 1 a 128 bytes) especificando o nome da coluna a ser usada para particionamento.
- FunctionSpec
-
Especifica a função de particionamento. Valores válidos:
identity
: usa valores de origem diretamente sem transformaçãoyear
: extrai o ano dos valores do carimbo de data/hora (por exemplo, 2023)month
: extrai o mês dos valores do carimbo de data/hora (por exemplo, 2023-01)day
: extrai o dia dos valores do carimbo de data/hora (por exemplo, 2023-01-15)hour
: extrai a hora dos valores do carimbo de data/hora (por exemplo, 2023-01-15-14)
nota
As funções baseadas em tempo (
year
,month
,day
,hour
) exigem que o parâmetroConversionSpec
especifique o formato do carimbo de data/hora de origem. - ConversionSpec
-
Uma string UTF-8 que especifica o formato de timestamp dos dados da fonte. Os valores válidos são:
-
epoch_sec
: timestamp da era Unix em segundos -
epoch_milli
: timetstamp da era Unix em milissegundos -
iso
: timestamp no formato ISO 8601
-
Estratégias de particionamento
Particionamento padrão
Quando nenhuma coluna de partição é especificada, o ETL zero do AWS Glue aplica estratégias de particionamento padrão otimizadas para sua fonte de dados:
-
Particionamento baseado em chave primária: para fontes com chaves primárias (como tabelas do DynamoDB), o ETL zerp dp AWS Glue particiona automaticamente os dados usando a chave primária com o armazenamento em bucket para evitar a explosão de partições.
O particionamento padrão foi projetado para funcionar bem para padrões de consulta comuns sem exigir configuração manual. No entanto, para padrões de consulta específicos ou requisitos de desempenho, você pode querer definir estratégias personalizadas de particionamento.
Estratégias de particionamento definidas pelo usuário
O ETL zero do AWS Glue permite que você defina estratégias de particionamento personalizadas usando o parâmetro PartitionSpec
. Você pode especificar uma ou mais colunas de partição e aplicar diferentes funções de particionamento a cada coluna.
O particionamento de identidade usa os valores brutos de uma coluna para criar partições. Essa estratégia é útil para colunas com cardinalidade baixa a média, como campos de categoria, região ou status.
exemplo Exemplo de particionamento de identidade
{ "partitionSpec": [ { "fieldName": "category", "functionSpec": "identity" } ] }
Isso cria partições separadas para cada valor exclusivo na coluna "categoria".
Atenção
Evite usar o particionamento de identidade com colunas de alta cardinalidade (como chaves primárias ou carimbos de data/hora), pois isso pode causar uma explosão de partições, o que prejudica o desempenho e aumenta a sobrecarga de metadados.
O particionamento com base em tempo organiza os dados com base em valores do carimbo de data/hora em diferentes granularidades (ano, mês, dia ou hora). Essa estratégia é ideal para dados de séries temporais e permite consultas eficientes em intervalos de tempo.
Ao usar o particionamento baseado em tempo, o ETL zero do AWS Glue pode converter automaticamente vários formatos do carimbo de data/hora em um formato padronizado antes de aplicar a função de partição. Essa conversão é especificada usando o parâmetro ConversionSpec
.
exemplo Exemplo de particionamento com base em tempo
{ "partitionSpec": [ { "fieldName": "created_at", "functionSpec": "month", "conversionSpec": "epoch_milli" } ] }
Isso particiona os dados por mês com base na coluna “created_at”, que contém carimbos de data/hora da época Unix em milissegundos.
O ETL zero do AWS Glue suporta as seguintes funções de partição baseadas em tempo:
-
ano: particiona dados por ano (por exemplo, 2023, 2024)
-
mês: particiona dados por mês (por exemplo, 2023-01, 2023-02)
-
dia: particiona dados por dia (por exemplo, 2023-01-01, 2023-01-02)
-
hora: particiona dados por hora (por exemplo, 2023-01-01-01, 2023-01-01-02)
O ETL zero do AWS Glue suporta os seguintes formatos de carimbo de data/hora por meio do parâmetro ConversionSpec
:
-
epoch_sec: carimbos de data/hora da época Unix em segundos
-
epoch_milli: carimbos de data/hora da época Unix em milissegundos
-
iso: carimbos de data/hora formatado em ISO 8601
nota
Os valores originais da coluna permanecem inalterados nos dados da fonte. AWS O Glue transformará apenas os valores das colunas de partição no tipo de carimbo de data/hora na tabela do banco de dados de destino. As transformações se aplicam apenas ao processo de particionamento baseado em carimbo de data/hora.
O particionamento de vários níveis combina várias estratégias de partição para criar um esquema de particionamento hierárquico. Isso é útil para otimizar diferentes tipos de consultas no mesmo conjunto de dados.
exemplo Exemplo de particionamento de vários níveis
{ "partitionSpec": [ { "fieldName": "created_at", "functionSpec": "month", "conversionSpec": "iso" }, { "fieldName": "region", "functionSpec": "identity" } ] }
Isso cria um esquema de particionamento de três níveis: primeiro por mês (da coluna "created_at") e, em seguida, por região. Isso permite consultas eficientes que filtram por intervalos de datas, regiões específicas, segmentos de usuários ou qualquer combinação dessas dimensões.
Ao projetar esquemas de particionamento de vários níveis, considere:
-
Colocar colunas de maior seletividade em primeiro lugar na hierarquia de partições
-
Equilibrar a granularidade da partição com o número de partições
-
Alinhar o esquema de particionamento com seus padrões de consulta mais comuns
Práticas recomendadas
Seleção da coluna de partição
-
Não use colunas de alta cardinalidade com a função de partição
identity
. O uso de colunas de alta cardinalidade com particionamento baseado em identidade cria muitas pequenas partições, o que pode degradar significativamente o desempenho de ingestão. Colunas de alta cardinalidade podem incluir:-
Chaves primárias
-
Campos de timestamp (como
LastModifiedTimestamp
,CreatedDate
) -
Timestamps gerados pelo sistema
-
-
Não selecione várias partições de timestamp na mesma coluna. Por exemplo:
"partitionSpec": [ {"fieldName": "col1", "functionSpec": "year", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "month", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "day", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "hour", "conversionSpec" : "epoch_milli"} ]
Seleção de FunctionSpec/ConversionSpec da partição
-
Especifique o ConversionSpec correto (epoch_sec | epoch_milli | iso) que representa o formato dos valores de coluna escolhidos para particionamento baseado em carimbo de data/hora ao usar funções de partição baseadas em carimbo de data/hora. AWS O Glue Zero-ETL usa esse parâmetro para transformar corretamente os dados da fonte no formato de timestamp antes do particionamento.
-
Use a granularidade apropriada (ano/mês/dia/hora) com base no volume de dados.
-
Considere as implicações de fuso horário ao usar timestamps ISO. AWS O Glue Zero-ETL preenche todos os valores de registros da coluna de timestamp escolhida com o fuso horário UTC.
Tratamento de erros
Estado NEEDS_ATTENTION
Uma integração entra no estado NEEDS_ATTENTION quando:
As colunas de partição especificadas não existem na fonte
Ocorre falha na conversão de timestamp das colunas de partição