
Suivez vos coûts BigQuery en temps réel avec le SuperQueryOperator
Photo de Soheb Zaidi sur Unsplash
" Combien ça coûte ? " Une question si fréquente dans le monde de la tech que toute personne dans une jeune start-up tressaille légèrement à chaque fois qu'on la pose. Et la réponse, invariablement : " On ne sait pas trop. "
Parmi les meilleurs outils pour orchestrer des workflows en data engineering, on trouve Apache Airflow. Il a permis à beaucoup d'entreprises de sortir de la rigidité du planificateur cron pour surfer sur les vagues du big data via les Directed Acyclic Graphs (DAGs).
Forcément, cela implique que de gros volumes de données circulent en permanence entre les bases de données — et ce ballet, aussi spectaculaire soit-il, a un coût difficile à éviter.
L'une de ces bases de données, un véritable supercalculateur en quelque sorte, s'appelle Google BigQuery. Produit phare de l'offre Google Cloud, elle traite les données à l'échelle du pétaoctet. Son atout : vous laisser oublier la puissance de l'infrastructure pour vous concentrer sur la qualité de vos analyses et les problématiques de flux de données à résoudre.
Un point clé à garder en tête avec BigQuery : la facilité avec laquelle un individu ou une organisation peut faire grimper la facture liée au scan des données sur la plateforme. Même les data engineers les plus aguerris vous raconteront, non sans inquiétude, leurs scans malheureux sur des données qu'ils ne visaient pas vraiment, et qui ont fait dérailler le budget mensuel d'analyse de leur entreprise.
C'est là qu'entre en scène superQuery. Sa philosophie : vous n'avez plus à vous soucier de vos coûts, parce que vous disposez de toutes les informations nécessaires et de garde-fous qui vous permettent de décider en connaissance de cause.
Connaître ses coûts dans Airflow

Pendant que vos DAGs Airflow tournent tranquillement et acheminent les données vers les systèmes de traitement de votre choix, une foule de logs s'accumulent en arrière-plan. Les logs Airflow sont accessibles, lisibles et offrent une bonne vue d'ensemble de l'activité de votre DAG. Et si ces fichiers de logs pouvaient en plus afficher des informations sur le plan d'exécution de votre requête, et notamment le coût et le volume total de données scannées ? Ce serait évidemment l'idéal. Quelque chose comme ceci :
--------------------------------------------------------------------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 0Cet extrait de log vous indique que votre opérateur BigQuery dans Airflow a scanné 24 Go de données pour un coût de 0,12 $. Simple. Vous pouvez aussi parser ces fichiers de logs avec un outil tiers ou un script bash, et générer un récapitulatif des coûts liés aux DAGs qui scannent des données BigQuery.

Comment ça marche ?
SuperQuery s'appuie sur un proxy MySql pour rendre la connectivité universelle et exposer une interface SQL permettant de récupérer ces informations.
L'étape suivante : le SuperQueryOperator
Voici les étapes à suivre pour obtenir les fonctionnalités décrites ci-dessus :
- Ajoutez le plugin superquery à Airflow afin de pouvoir utiliser le SuperQueryOperator.
- Inscrivez-vous à l'essai superQuery et récupérez les identifiants du proxy MySql superQuery.
- Testez votre connexion au proxy avec le DAG fourni ci-dessous.
- Remplacez vos opérateurs BigQuery par le SuperQuery operator dans vos propres DAGs dès que vous souhaitez profiter de cette fonctionnalité.
Utiliser le SuperQueryOperator
Voici l'interface de l'opérateur SuperQuery :
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)Voici le code de l'opérateur à copier dans le dossier plugins d'Airflow :
https://gist.github.com/super-eben/b1d49538b46fa3f55c5bddfe73405b34
Et voici un bout de code pour tester votre connexion à SuperQuery :
https://gist.github.com/super-eben/dcfa4420c419331e5a12a8b23e0a088c
En résumé
Cet article montre comment avoir une vision claire de vos coûts Airflow lorsque vous connectez et implémentez des tâches Airflow vers et depuis BigQuery. Le proxy SuperQuery peut aller bien plus loin et exposer toute une variété d'informations détaillées sur les plans d'exécution, pour tirer pleinement parti du système.
Bon suivi des coûts — et bonnes économies !