[PYTHON] Geben Sie das Kostenlimit an, wenn Sie BigQuery beiläufig von Jupyter abfragen

Geben Sie das Kostenlimit an, wenn Sie BigQuery mit Pandas auf Jupyter abfragen

Aufgabe

Wenn Sie Code interaktiv auf Jupyter schreiben und BigQuery abfragen, verursacht Tippfehler unerwartet hohe Gebühren. Wenn Sie beispielsweise Daten für 3 Tage abrufen möchten, legen Sie das zu übergebende Datum auf "TABLE_DATE_RANGE" fest

Und Tippfehler scannen die Tabelle für 1 Jahr und 3 Tage. Ich bemerke dies, wenn ich die Abfrage überprüfe, weil ich misstrauisch war, weil die Ergebnisse nicht einfach zurückkamen, nachdem ich den Abfragejob gesendet hatte.

Gegenmaßnahmen

Um dies zu verhindern, ohne die Attraktivität einer interaktiven Umgebung zu beeinträchtigen, in der Sie sofort schreiben und ausführen können, können Sie sie zur Laufzeit überprüfen. Glücklicherweise kann es als Option ab Version 0.20 von Pandas angegeben werden.

Es ist gut, den folgenden Wrapper für "pd.read_gbq" vorzubereiten, damit Sie das Kostenlimit pro Abfrage angeben können.

COST_LIMIT_PER_QUERY = 1 # USD
GBYTE = 1000000000
maximum_bytes_billed = int(COST_LIMIT_PER_QUERY * 200 * GBYTE)

def read_gbq(query):
    return pd.read_gbq(
        query, project_id=PROJECT_ID, verbose=False,
        configuration={'query':{
            'maximumBytesBilled': maximum_bytes_billed,
            'maximumBillingTier': 1 #Ich habe noch nie gesehen, dass es 2 wird, also ist es auf 1 festgelegt.
        }})

Wenn Sie die Obergrenze von "maximumBytesBilled" erreichen, enthält die Fehlermeldung die Werte, die zum Ausführen der Abfrage erforderlich sind.

Beispiel

GenericGBQException: Reason: bytesBilledLimitExceeded, Message: Query exceeded limit for bytes billed: 2000000. 20971520 or higher required.

Recommended Posts

Geben Sie das Kostenlimit an, wenn Sie BigQuery beiläufig von Jupyter abfragen
Verwenden Sie BigQuery von Ihrem lokalen Jupyter Notebook