
BigQuery-Kosten in Echtzeit überwachen – mit dem SuperQueryOperator
Foto von Soheb Zaidi auf Unsplash
"Was kostet das?" Eine Frage, die in der Tech-Welt so oft fällt, dass jeder im Start-up kurz zusammenzuckt, sobald sie kommt. Die Antwort lautet fast immer: "Wissen wir nicht genau."
Eines der besten Tools, um workloads im Data-Engineering zu orchestrieren, ist Apache Airflow. Es hat schon viele Unternehmen aus dem starren Cron-Korsett befreit und auf die Big-Data-Welle der Directed Acyclic Graphs (DAGs) gehoben.
Das heißt natürlich auch: Riesige Datenmengen wandern in Datenbanken hinein und wieder heraus – und mit jeder dieser Bewegungen entstehen Kosten, denen man kaum entkommt.
Eine dieser Datenbanken – im Grunde ein Supercomputer – ist Google BigQuery. Sie ist das Flaggschiff von Google Cloud und verarbeitet Daten im Petabyte-Maßstab. Ihre Stärke: Sie nimmt Ihnen Sorgen um die Datenbankinfrastruktur ab, sodass Sie sich auf das konzentrieren können, worauf es ankommt – die Qualität Ihrer Analysen und die zu lösenden Datenflussprobleme.
Ein wichtiger Punkt bei BigQuery: Wie schnell die Kosten für das Scannen von Daten in die Höhe schießen können, hängt stark davon ab, wie achtsam Einzelpersonen oder ganze Teams arbeiten. Selbst erfahrene Data Engineers erzählen mit Schaudern davon, wie sie versehentlich über Daten gescannt haben, die sie gar nicht gebraucht hätten – und damit die monatliche Analyserechnung über das Budget hinaus getrieben haben.
Genau hier setzt superQuery an. Die Idee dahinter: Sie müssen sich nicht um Ihre Kosten sorgen, weil Sie alle nötigen Informationen sowie ein paar Schutzmechanismen zur Hand haben, um fundierte Entscheidungen zu treffen.
Ihre Kosten in Airflow im Blick

Während Ihre Airflow-DAGs munter ihre Arbeit verrichten und Daten an die Verarbeitungssysteme Ihrer Wahl schicken, läuft im Hintergrund jede Menge Logging mit. Die Airflow-Logs sind leicht zugänglich, gut lesbar und liefern einen soliden Überblick darüber, was Ihr DAG gerade tut. Wäre es nicht klasse, wenn die Log-Dateien zusätzlich Informationen zum Query-Ausführungsplan zeigen würden – und zwar konkret, welche Kosten entstanden sind und wie viele Daten insgesamt gescannt wurden? Auf jeden Fall! Etwa so:
--------------------------------------------------------------------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 0Dieser Log-Auszug zeigt: Ihr BigQuery-Operator in Airflow hat 24 GB Daten gescannt, Kosten 0,12 $. So einfach ist das. Sie können die Log-Dateien außerdem mit einem Drittanbieter-Tool oder einem Bash-Skript parsen und sich so eine Zusammenfassung der Kosten zusammenstellen, die durch DAGs entstehen, die Daten aus BigQuery scannen.

Wie funktioniert das Ganze?
SuperQuery nutzt einen MySQL-Proxy, damit die Anbindung universell funktioniert, und stellt eine SQL-Schnittstelle bereit, über die Sie Informationen abrufen können.
Was Sie als Nächstes brauchen: den SuperQueryOperator
Mit diesen Schritten erreichen Sie die oben beschriebene Funktionalität:
- Fügen Sie das superquery-Plugin zu Airflow hinzu, damit Sie den SuperQueryOperator verwenden können.
- Registrieren Sie sich für eine superQuery-Testversion und holen Sie sich die Zugangsdaten für den superQuery-MySQL-Proxy.
- Testen Sie Ihre Verbindung zum Proxy mit dem unten bereitgestellten DAG.
- Ersetzen Sie in Ihren eigenen DAGs die BigQuery-Operatoren durch den SuperQuery-Operator, wenn Sie diese Funktionalität nutzen möchten.
Den SuperQueryOperator einsetzen
So sieht die Schnittstelle des SuperQuery-Operators aus:
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)Hier der Code für den Operator, den Sie in den plugins-Ordner in Airflow kopieren sollten:
https://gist.github.com/super-eben/b1d49538b46fa3f55c5bddfe73405b34
Und hier etwas Code, mit dem Sie Ihre Verbindung zu SuperQuery testen können:
https://gist.github.com/super-eben/dcfa4420c419331e5a12a8b23e0a088c
Fazit
Dieser Beitrag zeigt, wie Sie Ihre Airflow-Kosten transparent machen, sobald Sie Airflow-Tasks an BigQuery anbinden – in beide Richtungen. Der SuperQuery-Proxy lässt sich darüber hinaus für viele weitere Details zum Ausführungsplan einsetzen und macht so die Stärken des Systems voll nutzbar.
Viel Erfolg beim Kostenmonitoring – und beim Sparen!