Pular para o conteúdo principal

Organize datasets em Lakeflow pipelines

Use LakeFlow Pipelines para processar de um a centenas de datasets em um único pipeline. Decida quais datasets pertencem juntos com base no domínio, cadência e dependências, e divida o trabalho em pipelines separados quando a propriedade, latência ou escala forem diferentes.

Visão geral

Uma decisão que nunca surge em um tutorial torna-se importante em implantações reais: quais tabelas pertencem ao mesmo pipeline e quando algo deve ser seu próprio pipeline? Errar nisso é uma das maneiras mais comuns de as equipes se colocarem em uma situação difícil. O modo de falha clássico é despejar tudo em um pipeline gigante e, posteriormente, enfrentar problemas de escalonamento, concorrência e raio de explosão que são difíceis de reverter.

Não existe uma única resposta correta, mas há forças claras atuando em cada direção e uma restrição importante que vale a pena conhecer antes de projetar.

Diretrizes

Agrupe datasets por domínio, cadência compartilhada e dependência, e divida-os nos limites de propriedade, camada e latência. Mantenha a contagem de datasets atualizáveis de forma independente de qualquer pipeline individual confortavelmente abaixo do limite de atualização paralela.

Conheça o limite de concorrência antes de projetar.

Uma única atualização de pipeline com trigger executa no máximo 16 atualizações de dataset em paralelo . Esta é a surpresa mais comum para equipes que colocam tudo em um pipeline: quando você tem mais de aproximadamente 16 datasets que poderiam ser executados simultaneamente, os extras ficam na fila atrás dos primeiros 16 em vez de serem executados em paralelo, portanto, o tempo total de atualização aumenta, mesmo havendo compute disponível. Se você tem dezenas de datasets independentes e se preocupa com o tempo de atualização do relógio de parede, isso por si só é um motivo para não amontoá-los todos em um único pipeline.

O que pertence ao mesmo pipeline

Mantenha os conjuntos de dados juntos quando eles compartilharem estrutura ou agendamento:

  • Conjuntos de dados que formam uma cadeia de dependência ou um domínio lógico, como as tabelas de bronze, prata e ouro para pedidos. Manter um grafo acíclico direcionado (DAG) conectado permite que o pipeline o agende, faça checkpoints e o full-refresh como uma unidade coerente, além de manter a linhagem legível. Consulte Carregar e processar dados incrementalmente com LakeFlow Pipelines.
  • Conjuntos de dados que compartilham o mesmo requisito de atualização e cadência de execução, como itens que devem ser atualizados juntos, pelo mesmo Trigger, no mesmo limite de transação.
  • Datasets pequenos o suficiente no agregado para que todo o gráfico caiba confortavelmente abaixo do limite de atualização paralela e seja refresh em um tempo aceitável.

O que pertence a um pipeline separado

Divida os conjuntos de dados quando eles diferirem em propriedade, camada ou latência:

  • Domínios ou equipes diferentes. Propriedade separada geralmente deve significar pipelines separados, para que a alteração ou falha de uma equipe não bloqueie a de outra.
  • Camadas que você deseja escalar ou programar independentemente. Uma divisão amplamente recomendada é separar a ingestão (bronze) da transformação (prata e ouro) em pipelines distintos, para que uma ingestão lenta ou com falha não atrase a transformação e cada uma possa dimensionar o compute de acordo com suas próprias necessidades.
  • Diferentes perfis de latência. Uma transmissão contínua de baixa latência não deve compartilhar o mesmo pipeline com um agregador de lotes que processa dados uma vez por dia. Consulte Modo de Trigger vs. modo de pipeline contínuo.
  • Datasets que levam você além do limite de atualização paralela e que, de outra forma, entrariam na fila.

Para executar um conjunto de conjuntos de dados isoladamente, considere um pipeline autônomo. Consulte Pipelines autônomos vs. LakeFlow Pipelines.

Uma regra geral prática

Não use um pipeline monolítico como default, e também não fragmente cada tabela em seu próprio pipeline. Agrupe por domínio + cadência compartilhada + dependência , divida em limites de propriedade, camada e latência , e mantenha a contagem de datasets atualizáveis independentemente de qualquer pipeline individual confortavelmente abaixo do limite de atualização paralela. Em caso de dúvida, prefira um punhado de pipelines médios alinhados aos domínios em vez de um pipeline gigante. É muito mais fácil fazer merge de dois pipelines pequenos posteriormente do que dividir um monólito que já está em produção.

Limitações

  • Uma única atualização acionada executa no máximo 16 atualizações de dataset em paralelo. Os datasets que ultrapassam esse limite são enfileirados em vez de serem executados simultaneamente, portanto, um pipeline com dezenas de datasets independentes pode demorar mais para ser atualizado, mesmo quando há compute disponível.
  • A divisão em vários pipelines custa um pouco da visibilidade de ponta a ponta. Ao dividir, conte com as tabelas do sistema (system.lakeflow.pipelines, system.lakeflow.job_run_timeline) e orquestre as peças juntas com um Lakeflow Job para que você ainda obtenha uma única visão de ponta a ponta de todo o fluxo. Consulte Executar pipelines em um fluxo de trabalho.

Outros recursos