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
TABLE_DATE_RANGE (xxx_, TIMESTAMP ('2017-05-01'), TIMETAMP ('2017-05-03'))
TABLE_DATE_RANGE (xxx_, TIMESTAMP ('2016-05-01'), TIMETAMP ('2017-05-03'))
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.
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.