
Monitore os custos do BigQuery em tempo real com o SuperQueryOperator
Foto de Soheb Zaidi no Unsplash
"Qual é o custo?" Essa pergunta é tão comum no mundo da tecnologia que faz qualquer pessoa de uma start-up estremecer só de ouvir. E a resposta, quase sempre, é a mesma: "Não sabemos ao certo".
Uma das melhores ferramentas para orquestrar workflows na engenharia de dados é o Apache Airflow. Ele tirou muitas empresas do marasmo do agendamento engessado via cron e as colocou para surfar nas ondas do big data, navegando pelos mares dos Directed Acyclic Graphs (DAGs).
Claro que isso significa mover grandes volumes de dados para dentro e para fora dos bancos — e essa movimentação toda costuma vir acompanhada de custos inevitáveis.
Um desses bancos de dados, um supercomputador, por assim dizer, é o Google BigQuery. É o carro-chefe do Google Cloud e permite processar dados em escala de Petabytes. Ele é ótimo em deixar você se preocupar menos com a potência da infraestrutura e mais com a qualidade da sua análise e com os problemas de fluxo de dados que precisam ser resolvidos.
Um ponto crítico do BigQuery é o quanto qualquer pessoa ou empresa pode acabar inflando os custos ao varrer dados na plataforma. Até os engenheiros de dados mais tarimbados vão te contar, com angústia, que já escanearam dados que não precisavam e estouraram o orçamento mensal de análise da empresa.
É aí que entra o superQuery. A proposta do superQuery é que você não precise se preocupar com custos, porque tem em mãos todas as informações necessárias e algumas travas de segurança que permitem decidir com base em dados.
Acompanhando os custos no Airflow

Enquanto seus DAGs do Airflow rodam tranquilos e mandam dados para os sistemas de processamento da sua escolha, um monte de log é gerado nos bastidores. Os logs do Airflow são acessíveis, fáceis de ler e dão uma boa visão geral do que o seu DAG está fazendo. Não seria ótimo se esses arquivos de log também mostrassem informações sobre o plano de execução da consulta e, principalmente, qual foi o custo e o total de dados escaneados? Com certeza seria! Algo assim:
--------------------------------------------------------------------Starting attempt 1 of 4--------------------------------------------------------------------
[2019-03-11 21:12:02,129] {models.py:1593} INFO - Executing <Task(SuperQueryOperator): connect_to_superquery_proxy> on 2019-03-01T00:00:00+00:00[2019-03-11 21:12:03,836] {superq_operators.py:54} INFO - Executing: #standardSQLSELECT COUNT(testField) FROM `mydata.PROD.myTable`;[2019-03-11 21:12:03,844] {logging_mixin.py:95} INFO - [2019-03-11 21:12:03,843] {base_hook.py:83} INFO - Using connection to: id: mysql_default. Host: superproxy.system.io, Port: 3306, Schema: None, Login: XXXXXX, Password: XXXXXXXX, extra: {}[2019-03-11 21:12:15,172] {superq_operators.py:68} INFO - (('{ "startTime":1552331525642, "endTime":1552331534624, "executionTime":"8988", "bigQueryTotalBytesProcessed":26388279066, "bigQueryTotalCost":"0.12", "superQueryTotalBytesProcessed":0, "superQueryTotalCost":"0.00", "saving":0, "totalRows":"1",}', '', '1', 'true'),)[2019-03-11 21:12:17,121] {logging_mixin.py:95} INFO - [2019-03-11 21:12:17,119] {jobs.py:2527} INFO - Task exited with return code 0Esse trecho de log mostra que o seu operador do BigQuery no Airflow varreu 24Gb de dados e custou US$ 0,12. Simples assim. Você ainda pode dar um passo a mais e processar os arquivos de log em uma ferramenta de terceiros ou um script bash para gerar um resumo dos custos vindos dos DAGs que consultam dados no BigQuery.

Como tudo isso funciona?
O SuperQuery usa um proxy MySql para universalizar a conectividade e oferecer uma interface SQL para obter informações.
O próximo passo: o SuperQueryOperator
Veja o passo a passo para ter a mesma funcionalidade descrita acima:
- Adicione o plugin do superquery ao Airflow para poder usar o SuperQueryOperator.
- Assine o teste gratuito do superQuery e pegue os dados de acesso ao proxy MySql.
- Teste sua conexão com o proxy usando o DAG disponibilizado abaixo.
- Substitua seus operadores do BigQuery pelo SuperQuery operator nos seus DAGs sempre que quiser usar essa funcionalidade.
Usando o SuperQueryOperator
Esta é a interface do SuperQuery operator:
TEST_SQL = """#standardSQLSELECT COUNT(*) FROM `mydata.PROD.myTable`;"""SuperQueryOperator( task_id="connect_to_superquery_proxy", sql=TEST_SQL, database="", explain=True, # False if you don't want information dag=dag)Aqui vai o código do operator, que você deve copiar para a pasta plugins no Airflow:
https://gist.github.com/super-eben/b1d49538b46fa3f55c5bddfe73405b34
E aqui um código para testar a sua conexão com o SuperQuery:
https://gist.github.com/super-eben/dcfa4420c419331e5a12a8b23e0a088c
Resumindo
Este post mostra como você pode ter visibilidade dos custos do Airflow ao conectar e executar tarefas do Airflow de e para o BigQuery. O uso do proxy do SuperQuery pode ir além e incluir uma variedade de informações detalhadas sobre o plano de execução, aproveitando ao máximo o que o sistema oferece.
Bom monitoramento (e boa economia) de custos!