Como melhor processar grandes resultados de consulta gravados na tabela intermediária no App Engine

Estamos executando grandes tarefas de consulta em que atingimos o tamanho da resposta de 128M e o BigQuery gera o erro "Resposta muito grande para retornar. Considere definir o parâmetro allowLargeResults como true na configuração da sua tarefa".

Estamos optando pela abordagem allowLargeResults para manter o já complexo SQL inalterado (em vez de dividir as coisas nesse nível). A questão é qual é a melhor maneira de processar os resultados gravados na tabela intermediária:

Exporte a tabela para o GCS e, em seguida, enfileire as tarefas que processam pedaços do arquivo de resposta usando deslocamentos para o arquivo GCS. Isso introduz a latência do GCS, manutenção de arquivos do GCS (por exemplo, limpeza de arquivos) e outro ponto de falha (erros de http / tempos limite etc.).

Pedaços de consulta das tabelas intermediárias também usando tarefas em fila. A pergunta aqui é qual é a melhor maneira de agrupar as linhas (existe uma maneira eficiente de fazer isso, por exemplo, existe um número de linha interno ao qual podemos nos referir?). Provavelmente, acabamos varrendo a tabela inteira para cada pedaço, portanto isso parece mais caro do que a opção de exportação para GCS.

Alguma experiência nesta área e / ou recomendações?

Observe que estamos executando no Google App Engine (Python)

Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion