
Monitorare i costi di BigQuery in tempo reale con SuperQueryOperator
Foto di Soheb Zaidi su Unsplash
"Quanto costa?" Una domanda così ricorrente nel mondo tech che chiunque lavori in una piccola start-up sussulta leggermente quando se la sente porre. E la risposta, immancabilmente, è: "Non lo sappiamo con certezza".
Uno dei migliori strumenti per orchestrare i workflow nel data engineering è Apache Airflow. Questo strumento ha tirato fuori molte aziende dalle secche della rigida pianificazione cron, portandole a cavalcare le onde dei big data nei mari aperti dei Directed Acyclic Graphs (DAG).
Naturalmente questo significa che enormi volumi di dati transitano da e verso i database e, insieme a questo movimento glorioso, arrivano spesso costi inevitabili.
Uno di questi database, un vero e proprio supercomputer, si chiama Google BigQuery. È il fiore all'occhiello dell'offerta Google Cloud e consente di elaborare dati su scala Petabyte. È particolarmente bravo nel farLe pensare meno alla potenza dell'infrastruttura del database e più alla qualità delle Sue analisi e ai problemi di flusso dei dati che deve risolvere.
Un fattore chiave da considerare con BigQuery è la facilità con cui un singolo utente o un'intera organizzazione può far lievitare i costi di scansione dei dati sulla piattaforma. Anche i data engineer più esperti Le racconteranno con un certo disagio degli errori commessi nello scansionare dati che in realtà non gli servivano, sforando così il budget mensile dell'azienda destinato alle analisi.
Entra in scena superQuery. La filosofia di superQuery è semplice: non deve preoccuparsi dei costi, perché ha a disposizione tutte le informazioni necessarie e una serie di tutele che Le permettono di prendere decisioni consapevoli.
Tenere sotto controllo i costi in Airflow

Mentre i Suoi DAG di Airflow lavorano serenamente, inviando dati ai sistemi di elaborazione che ha scelto, in background viene generata una grande mole di log. I log di Airflow sono facilmente accessibili, di lettura semplice e Le offrono una buona panoramica di ciò che il Suo DAG sta facendo. Non sarebbe fantastico se i file di log mostrassero anche informazioni sul piano di esecuzione delle query e, in particolare, il costo e la quantità totale di dati scansionati? Certo che lo sarebbe. Qualcosa di questo tipo:
--------------------------------------------------------------------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 0Questo estratto di log Le dice che il Suo operatore BigQuery in Airflow ha scansionato 24 GB di dati a un costo di 0,12 $. Semplice. Può anche fare un passo in più ed elaborare i file di log con uno strumento di terze parti o uno script bash, per ottenere un riepilogo dei costi generati dai DAG che leggono dati da BigQuery.

Come funziona tutto questo?
SuperQuery si appoggia a un proxy MySql per rendere la connettività universale e offrire un'interfaccia SQL da cui ricavare informazioni.
Cosa Le serve ora: SuperQueryOperator
Ecco i passaggi da seguire per ottenere la funzionalità descritta sopra:
- Aggiunga il plugin superquery ad Airflow per poter utilizzare SuperQueryOperator.
- Si iscriva alla prova gratuita di superQuery e ottenga le credenziali di accesso al proxy MySql di superQuery.
- Verifichi la connessione al proxy utilizzando il DAG riportato di seguito.
- Sostituisca i Suoi operatori BigQuery con SuperQueryOperator nei Suoi DAG quando vuole sfruttare questa funzionalità.
Come usare SuperQueryOperator
Questa è l'interfaccia di SuperQueryOperator:
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)Ecco il codice dell'operatore, da copiare nella cartella plugins di Airflow:
https://gist.github.com/super-eben/b1d49538b46fa3f55c5bddfe73405b34
E qui trova un po' di codice per testare la connessione a SuperQuery:
https://gist.github.com/super-eben/dcfa4420c419331e5a12a8b23e0a088c
In sintesi
Questo articolo descrive come ottenere visibilità sui costi di Airflow quando si collegano e si implementano task Airflow da e verso BigQuery. L'utilizzo del proxy SuperQuery può essere esteso per includere un'ampia gamma di informazioni dettagliate sul piano di esecuzione e sfruttare appieno i vantaggi offerti dal sistema.
Buon monitoraggio (e buon risparmio) dei costi!