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 a 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 JOIN complexas ou outras transformações compatíveis. Executar algumas transformações no BigQuery pode ser mais rápido do que no Spark.
Transformações não compatíveis e todas as transformações de prévia 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 posterior, mas algumas das transformações a seguir são compatíveis apenas com versões mais recentes.
JOIN operações
O pushdown de transformação está disponível para operações
JOINna versão 6.5.0 e posterior do Cloud Data Fusion.As operações básicas (nas chaves) e avançadas de
JOINsã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 junção já tiver sido enviada.
- Se você configurou a junção para ser executada no SQL Engine (consulte a opção Etapas para forçar a execução).
Coletor do BigQuery
O pushdown de transformação está disponível para o gravador do BigQuery no Cloud Data Fusion versão 6.7.0 e posterior.
Quando o Coletor do BigQuery segue uma etapa que foi executada no BigQuery, a operação que grava registros no BigQuery é realizada diretamente no BigQuery.
Para melhorar o desempenho com esse coletor, 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 o pushdown de transformação e o receptor do BigQuery precisam ser armazenados no mesmo local.
- A operação precisa ser uma das seguintes:
Insert(a opçãoTruncate Tablenão é compatível)UpdateUpsert
Agregações de 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 posterior.
As agregações GROUP BY no BigQuery estão disponíveis para as seguintes operações:
AvgCollect List(valores nulos são removidos da matriz de saída)Collect Set(valores nulos são removidos da matriz de saída)ConcatConcat DistinctCountCount DistinctCount NullsLogical AndLogical OrMaxMinStandard DeviationSumSum of SquaresCorrected Sum of SquaresVarianceShortest StringLongest String
As agregações GROUP BY são executadas no BigQuery nos seguintes casos:
- Ele segue um estágio que já foi reduzido.
- Você o configurou para ser executado no SQL Engine (consulte a opção Etapas para forçar a execução).
Eliminar a duplicação de agregações
O pushdown de transformação está disponível para agregações de remoção de duplicação no Cloud Data Fusion versão 6.7.0 e posterior para as seguintes operações:
- Nenhuma operação de filtro 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:
FIRSTLAST
As agregações de remoção de duplicidade são executadas no mecanismo SQL nos seguintes casos:
- Ele segue um estágio que já foi reduzido.
- Você o configurou para ser executado no SQL Engine (consulte a opção Etapas para forçar a execução).
Pushdown de origem do BigQuery
O pushdown de origem do BigQuery está disponível nas versões 6.8.0 e posteriores do Cloud Data Fusion.
Quando uma origem do BigQuery segue uma etapa compatível com o 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.
Ao usar o pushdown de origem do BigQuery, as propriedades de particionamento e clustering de tabelas são preservadas, o que permite usar essas propriedades para otimizar outras operações, como junções.
Outros requisitos
Para usar o pushdown de origem do BigQuery, os seguintes requisitos precisam ser atendidos:
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 origem do BigQuery e o conjunto de dados configurado para o pushdown de transformação precisam ser armazenados no mesmo local.
Agregações de janelas
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:
RankDense RankPercent RankN tileRow NumberMedianContinuous PercentileLeadLagFirstLastCumulative distributionAccumulate
As agregações de janela são executadas no BigQuery nos seguintes casos:
- Ele segue um estágio que já foi reduzido.
- Você o configurou para ser executado no SQL Engine (consulte a opção Estágios para forçar o pushdown).
Redução de filtros 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 em 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, já que 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 o pushdown de transformação está ativado. Se usado com várias entradas, esse estágio do Wrangler com condições de filtro SQL será executado no Spark.
Os filtros são executados no BigQuery nos seguintes casos:
- Ele segue um estágio que já foi reduzido.
- Você o configurou para ser executado no SQL Engine (consulte a opção Estágios para forçar o 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 de pushdown do pipeline do BigQuery.
Quando usar o pushdown de transformação
A execução de transformações no BigQuery envolve o seguinte:
- Gravar registros no BigQuery para etapas compatíveis no seu pipeline.
- Executar etapas compatíveis no BigQuery.
- Ler registros do BigQuery depois que as transformações compatíveis são executadas, a menos que sejam seguidas por um Coletor do BigQuery.
Dependendo do tamanho dos conjuntos de dados, pode haver uma sobrecarga considerável na rede, o que pode ter um impacto negativo no tempo total de execução do pipeline quando o pushdown de transformação está ativado.
Devido à sobrecarga da rede, recomendamos o pushdown de transformação nos seguintes casos:
- Várias operações compatíveis são executadas em sequência (sem etapas entre os estágios).
- Os ganhos de performance do BigQuery ao executar as transformações, em relação ao Spark, superam a latência da movimentação 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 compatíveis no BigQuery. Todas as outras etapas do pipeline são executadas 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
JOINe as transformações compatíveis 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 uma etapa executada 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 compatíveis 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 provisionado do serviço gerenciado para Apache Spark 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 jobs grandes.
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 os pipelines podem ser executados em clusters menores do serviço gerenciado para Apache Spark. Se as junções 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.
Recuperar dados mais rápido com a API BigQuery Storage Read
Depois que o BigQuery executa as transformações, seu pipeline pode ter mais etapas para executar no Spark. Na versão 6.7.0 e mais recentes do Cloud Data Fusion, o Transformation Pushdown é compatível com a 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 geral de execução do pipeline.
A API lê registros em paralelo. Por isso, recomendamos ajustar os tamanhos do executor de acordo com a necessidade. Se operações que consomem muitos recursos forem executadas no BigQuery, reduza a alocação de memória para os executores e melhore o paralelismo quando o pipeline for executado. Consulte Ajustar tamanhos de cluster e executor.
A API BigQuery Storage Read fica desativada por padrão. É possível ativar em ambientes de execução em que o Scala 2.12 está instalado, incluindo o Managed Service for Apache Spark 2.0 e o Managed Service for Apache Spark 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, causando falha na operação JOIN. Para evitar isso, acesse as configurações do plug-in Joiner e identifique a entrada distorcida no campo Etapa de entrada distorcida. Isso permite que o Cloud Data Fusion organize as entradas de forma a reduzir o risco de a instrução do BigQuery exceder os limites.
