Para melhorar o desempenho nos pipelines de dados, é possível enviar algumas operações de transformação para o BigQuery em vez do Apache Spark. O pushdown de transformação é uma configuração que permite que uma operação em um pipeline de dados do Cloud Data Fusion seja enviada ao BigQuery como um mecanismo de execução. Como resultado, a operação e os dados dela são transferidos para o BigQuery e a operação é realizada lá.
O pushdown de transformação melhora o desempenho de pipelines que têm
várias operações complexas
de JOIN
ou outras transformações com suporte. A execução de algumas transformações no
BigQuery pode ser mais rápida do que no Spark.
As transformações sem suporte e todas as transformações de visualização são executadas no Spark.
Transformações compatíveis
O pushdown de transformação está disponível no Cloud Data Fusion versão 6.5.0 e mais recente, mas algumas das transformações a seguir têm suporte apenas em versões mais recentes.
JOIN
operações
O pushdown de transformação está disponível para operações
JOIN
no Cloud Data Fusion versão 6.5.0 e mais recentes.As operações
JOIN
básicas (em teclas) e avançadas são compatíveis.As junções precisam ter exatamente dois estágios de entrada para que a execução ocorra no BigQuery.
As junções configuradas para carregar uma ou mais entradas na memória são executadas no Spark, em vez do BigQuery, exceto nos seguintes casos:
- Se alguma das entradas da mesclagem já foi enviada para baixo.
- Se você tiver configurado a mesclagem para ser executada no SQL Engine (consulte a opção Stages to force execution).
Coletor do BigQuery
O pushdown de transformação está disponível para o sumidouro do BigQuery no Cloud Data Fusion versão 6.7.0 e mais recentes.
Quando o Sink do BigQuery segue um estágio que foi executado no BigQuery, a operação que grava registros no BigQuery é realizada diretamente no BigQuery.
Para melhorar o desempenho com esse sink, você precisa do seguinte:
- A conta de serviço precisa ter permissão para criar e atualizar tabelas no conjunto de dados usado pelo coletor do BigQuery.
- Os conjuntos de dados usados para a transformação pushdown e o sumidor do BigQuery precisam ser armazenados no mesmo local.
- A operação precisa ser uma das seguintes:
Insert
(a opçãoTruncate Table
não é compatível)Update
Upsert
agregações GROUP BY
O pushdown de transformação está disponível para agregações GROUP BY
no
Cloud Data Fusion versão 6.7.0 e mais recentes.
As agregações GROUP BY
no BigQuery estão disponíveis para as
seguintes operações:
Avg
Collect List
(valores nulos são removidos da matriz de saída)Collect Set
(valores nulos são removidos da matriz de saída)Concat
Concat Distinct
Count
Count Distinct
Count Nulls
Logical And
Logical Or
Max
Min
Standard Deviation
Sum
Sum of Squares
Corrected Sum of Squares
Variance
Shortest String
Longest String
As agregações GROUP BY
são executadas no BigQuery nos seguintes
casos:
- Ele segue uma etapa que já foi rebaixada.
- Você configurou a execução no SQL Engine (consulte a opção Stages to force execution).
Eliminar a duplicação de agregações
O pushdown de transformação está disponível para agregações sem duplicação no Cloud Data Fusion versão 6.7.0 e mais recentes para as seguintes operações:
- Nenhuma operação de filtro foi especificada
ANY
(um valor não nulo para o campo desejado)MIN
(o valor mínimo do campo especificado)MAX
(o valor máximo do campo especificado)
As seguintes operações não são compatíveis:
FIRST
LAST
As agregações de eliminação de duplicação são executadas no mecanismo SQL nos seguintes casos:
- Ele segue uma etapa que já foi rebaixada.
- Você configurou a execução no SQL Engine (consulte a opção Stages to force execution).
Pushdown de origem do BigQuery
O pushdown de origem do BigQuery está disponível nas versões 6.8.0 e mais recentes do Cloud Data Fusion.
Quando uma fonte do BigQuery segue uma etapa compatível com a pushdown do BigQuery, o pipeline pode executar todas as etapas compatíveis no BigQuery.
O Cloud Data Fusion copia os registros necessários para executar o pipeline no BigQuery.
Quando você usa o BigQuery Source Pushdown, as propriedades de particionamento e agrupamento de tabelas são preservadas, o que permite usá-las para otimizar outras operações, como mesclagens.
Outros requisitos
Para usar o Pushdown de origem do BigQuery, os seguintes requisitos precisam estar presentes:
A conta de serviço configurada para o pushdown de transformação do BigQuery precisa ter permissões para ler tabelas no conjunto de dados da origem do BigQuery.
Os conjuntos de dados usados na fonte do BigQuery e o conjunto de dados configurado para pushdown de transformação precisam ser armazenados no mesmo local.
Agregações de janela
O pushdown de transformação está disponível para agregações de janela nas versões 6.9 e mais recentes do Cloud Data Fusion. As agregações de janela no BigQuery são compatíveis com as seguintes operações:
Rank
Dense Rank
Percent Rank
N tile
Row Number
Median
Continuous Percentile
Lead
Lag
First
Last
Cumulative distribution
Accumulate
As agregações de janela são executadas no BigQuery nos seguintes casos:
- Ele segue uma etapa que já foi rebaixada.
- Você configurou a execução no mecanismo SQL (consulte a opção Stages to force pushdown).
Pushdown de filtro do Wrangler
O pushdown de filtro do Wrangler está disponível nas versões 6.9 e mais recentes do Cloud Data Fusion.
Ao usar o plug-in Wrangler, é possível enviar filtros, conhecidos como operações Precondition
, para serem executados no BigQuery em vez do Spark.
O pushdown de filtro só é compatível com o modo SQL para pré-condições, que também foi lançado na versão 6.9. Nesse modo, o plug-in aceita uma expressão de pré-condição no SQL padrão ANSI.
Se o modo SQL for usado para condições prévias, as diretivas e as diretivas definidas pelo usuário serão desativadas para o plug-in Wrangler, porque não são compatíveis com condições prévias no modo SQL.
O modo SQL para pré-condições não é compatível com plug-ins do Wrangler com várias entradas quando a transformação pushdown está ativada. Se usado com várias entradas, essa etapa do Wrangler com condições de filtro SQL é executada no Spark.
Os filtros são executados no BigQuery nos seguintes casos:
- Ele segue uma etapa que já foi rebaixada.
- Você configurou a execução no mecanismo SQL (consulte a opção Stages to force pushdown).
Métricas
Para mais informações sobre as métricas que o Cloud Data Fusion fornece para a parte do pipeline executada no BigQuery, consulte Métricas do pipeline de pushdown do BigQuery.
Quando usar o pushdown de transformação
A execução de transformações no BigQuery envolve o seguinte:
- Gravação de registros no BigQuery para estágios com suporte no seu pipeline.
- Executar etapas com suporte no BigQuery.
- Ler registros do BigQuery depois que as transformações compatíveis são executadas, a menos que sejam seguidas por um Sink do BigQuery.
Dependendo do tamanho dos conjuntos de dados, pode haver uma sobrecarga considerável na rede, que pode ter um impacto negativo no tempo total de execução do pipeline quando o pushdown de transformação está ativado.
Devido à sobrecarga de rede, recomendamos a transformação pushdown nos seguintes casos:
- Várias operações com suporte são executadas em sequência (sem etapas entre os estágios).
- Os ganhos de desempenho do BigQuery ao executar as transformações, em relação ao Spark, superam a latência do movimento de dados para dentro e, possivelmente, para fora do BigQuery.
Como funciona
Quando você executa um pipeline que usa o pushdown de transformação, o Cloud Data Fusion executa as etapas de transformação com suporte no BigQuery. Todos os outros estágios do pipeline são executados no Spark.
Ao executar transformações:
O Cloud Data Fusion carrega os conjuntos de dados de entrada no BigQuery gravando registros no Cloud Storage e executando um job de carga do BigQuery.
As operações
JOIN
e as transformações com suporte são executadas como jobs do BigQuery usando instruções SQL.Se for necessário mais processamento após a execução dos jobs, os registros poderão ser exportados do BigQuery para o Spark. No entanto, se a opção Tentar cópia direta para coletores do BigQuery estiver ativada e o coletor do BigQuery seguir um estágio que foi executado no BigQuery, os registros serão gravados diretamente na tabela de coletor do BigQuery de destino.
O diagrama a seguir mostra como o pushdown de transformação executa transformações com suporte no BigQuery em vez do Spark.
Práticas recomendadas
Ajustar os tamanhos do cluster e do executor
Para otimizar o gerenciamento de recursos no pipeline, faça o seguinte:
Use o número certo de workers (nós) do cluster para uma carga de trabalho. Em outras palavras, aproveite ao máximo o cluster do Dataproc provisionado usando totalmente a CPU e a memória disponíveis para sua instância, além de aproveitar a velocidade de execução do BigQuery para grandes jobs.
Melhore o paralelismo nos pipelines usando os clusters de escalonamento automático.
Ajuste as configurações dos recursos nos estágios do pipeline em que os registros são enviados ou extraídos do BigQuery durante a execução do pipeline.
Recomendado: tente aumentar o número de núcleos de CPU para os recursos de executor (até o número de núcleos de CPU usados pelo nó de trabalho). Os executores otimizam o uso da CPU durante as etapas de serialização e desserialização à medida que os dados entram e saem do BigQuery. Para mais informações, consulte Dimensionamento de cluster.
Uma vantagem de executar transformações no BigQuery é que seus pipelines podem ser executados em clusters menores do Dataproc. Se as mesclagens forem as
operações que mais consomem recursos no pipeline, você poderá testar
tamanhos de cluster menores, já que as operações JOIN
pesadas agora são realizadas no
BigQuery, o que permite reduzir os custos
gerais de computação.
Extrair dados mais rapidamente com a API BigQuery Storage Read
Depois que o BigQuery executa as transformações, seu pipeline pode ter outros estágios para executar no Spark. Na versão 6.7.0 e mais recentes do Cloud Data Fusion, o pushdown de transformação oferece suporte à API BigQuery Storage Read, que melhora a latência e resulta em operações de leitura mais rápidas no Spark. Isso pode reduzir o tempo de execução geral do pipeline.
A API lê registros em paralelo. Por isso, recomendamos ajustar os tamanhos de executor de acordo. Se operações que consomem muitos recursos forem executadas no BigQuery, reduza a alocação de memória para os executores para melhorar o paralelismo quando o pipeline for executado. Consulte Ajustar os tamanhos de cluster e executor.
A API BigQuery Storage Read está desativada por padrão. É possível ativá-lo em ambientes de execução em que o Scala 2.12 está instalado (incluindo o Dataproc 2.0 e o Dataproc 1.5).
Considerar o tamanho do conjunto de dados
Considere os tamanhos dos conjuntos de dados nas operações JOIN
. Para operações de JOIN
que geram um número significativo de registros de saída, como
algo que se assemelha a uma operação JOIN
cruzada, o tamanho resultante do conjunto de dados pode ser
ordens de magnitude maior que o conjunto de dados de entrada. Além disso, considere
a sobrecarga desses registros de volta ao Spark quando ocorrer um processamento adicional do Spark
para esses registros (como uma transformação ou um coletor) no
contexto do desempenho geral do pipeline.
Mitigar dados distorcidos
As operações JOIN
para dados muito distorcidos podem fazer com que o job do BigQuery exceda os limites de utilização de recursos, o que faz com que a operação JOIN
falhe. Para evitar isso, acesse as configurações do plug-in
Joiner e identifique a entrada distorcida no campo
Skewed Input Stage. Isso permite que o Cloud Data Fusion organize as entradas de uma maneira que reduza o risco de a instrução do BigQuery exceder os limites.