Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Airflow et superQuery

By Eben Du ToitMar 12, 20194 min read

Cette page est également disponible en English, Deutsch, Español, Italiano, 日本語 et Português.

1 xmk dcdi2qeckymmzlzkda

Suivez vos coûts BigQuery en temps réel avec le SuperQueryOperator

1 xmk dcdi2qeckymmzlzkdaPhoto 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

1 wnx 9yasyzdavzemvxxveg

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: #standardSQL
SELECT 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 0

Cet 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.


1 hyjrfqs1qbbawfsevvqm0q

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 :

  1. Ajoutez le plugin superquery à Airflow afin de pouvoir utiliser le SuperQueryOperator.
  2. Inscrivez-vous à l'essai superQuery et récupérez les identifiants du proxy MySql superQuery.
  3. Testez votre connexion au proxy avec le DAG fourni ci-dessous.
  4. 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 = """#standardSQL
SELECT 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 !