[PYTHON] Spécifiez la limite de coût lors de l'interrogation de BigQuery à partir de Jupyter

Spécifiez la limite de coût lors de l'interrogation de BigQuery à l'aide de Pandas sur Jupyter

Tâche

Lorsque vous écrivez du code de manière interactive sur Jupyter et interrogez BigQuery, une faute de frappe entraîne des frais inopinément élevés. Par exemple, lorsque vous souhaitez obtenir des données pendant 3 jours, définissez la date à transmettre sur TABLE_DATE_RANGE

Et une faute de frappe analysera la table pendant 1 an et 3 jours. Je remarque cela lorsque j'examine la requête car j'étais méfiant car les résultats ne sont pas revenus facilement après avoir soumis le travail de requête.

Contre-mesures

Pour éviter cela sans compromettre l'attrait d'un environnement interactif où vous pouvez écrire et exécuter immédiatement, vous pouvez le vérifier au moment de l'exécution. Heureusement, il peut être spécifié comme option à partir de la v0.20 de Pandas.

Il est bon de préparer le wrapper suivant pour pd.read_gbq afin de pouvoir spécifier la limite supérieure du coût par requête.

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 #Je ne l'ai jamais vu devenir 2, donc il est fixé à 1.
        }})

Si vous atteignez la limite supérieure de maximumBytesBilled, le message d'erreur contiendra les valeurs nécessaires pour exécuter la requête.

Exemple

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

Recommended Posts

Spécifiez la limite de coût lors de l'interrogation de BigQuery à partir de Jupyter
Utilisez BigQuery à partir de votre bloc-notes Jupyter local