Skip to content

Adaptateur BigQuery

L'adaptateur BigQuery permet d'utiliser Noria avec Google BigQuery — idéal pour les entrepôts de données cloud à grande échelle.

Installation

pip install "noria[bigquery]"
# Installe sqlalchemy-bigquery et google-cloud-bigquery

Authentification

BigQuery utilise les Application Default Credentials (ADC) de Google Cloud. Authentifie-toi avant de lancer Noria :

# Option 1 — compte utilisateur (dev)
gcloud auth application-default login

# Option 2 — compte de service (prod)
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json

Configuration

database:
  dialect: bigquery
  database: mon-projet-gcp      # Project ID Google Cloud
  schema: mon_dataset            # Dataset BigQuery (optionnel)

Schema = Dataset

Dans BigQuery, le "schéma" correspond au dataset. La table cible mon_dataset.ma_table sera créée dans le dataset mon_dataset du projet mon-projet-gcp.

Macros spécifiques BigQuery

Macro Résultat BigQuery
{{ cast('col', 'STRING') }} CAST(col AS STRING)
{{ date_trunc('month', 'col') }} DATE_TRUNC(col, MONTH)
{{ current_timestamp() }} CURRENT_TIMESTAMP()
{{ concat('a', 'b') }} CONCAT(a, b)
{{ to_char('col', '%Y-%m') }} FORMAT_TIMESTAMP('%Y-%m', col)
{{ safe_divide('a', 'b') }} SAFE_DIVIDE(a, b)

Syntaxe DATE_TRUNC BigQuery

BigQuery inverse les arguments : DATE_TRUNC(col, MONTH) au lieu de DATE_TRUNC('month', col). La macro {{ date_trunc() }} gère cette différence automatiquement.

SAFE_DIVIDE natif

BigQuery dispose de SAFE_DIVIDE() nativement — la macro l'utilise directement au lieu de la version CASE WHEN.

Types de données BigQuery

SQL standard BigQuery
VARCHAR STRING
INTEGER INT64
FLOAT FLOAT64
BOOLEAN BOOL
TIMESTAMP TIMESTAMP
DATE DATE
-- Avec les macros (portables)
{{ cast('id', 'STRING') }}
{{ cast('montant', 'FLOAT64') }}

-- SQL BigQuery natif (non portable)
CAST(id AS STRING)

Particularités BigQuery

Tables partitionnées

Pour les grandes tables, utilise le partitionnement BigQuery avec output_write: incremental :

nodes:
  commandes:
    sql: sql/commandes.sql
    target: "mon_dataset.commandes"
    output_write: incremental
    incremental_key: date_commande

Coût des requêtes

BigQuery facture au volume de données scannées. output_write: safe_replace est particulièrement utile pour éviter de remplacer une table par un résultat vide suite à une requête incorrecte.

nodes:
  table_importante:
    output_write: safe_replace
    safe_replace_min_rows: 10000

MERGE natif

L'adaptateur BigQuery utilise la syntaxe MERGE ... USING ... ON ... WHEN MATCHED THEN DELETE WHEN NOT MATCHED THEN INSERT ROW — plus efficace que la version delete+insert.

Limitations

  • Seeds : les seeds utilisent les fonctions DuckDB localement. Pour charger un fichier dans BigQuery, utilise bq load ou Google Cloud Storage en pre_hook.
  • DDL transactionnel : BigQuery ne supporte pas les transactions DDL — les opérations sont atomiques par statement.
  • Quota : BigQuery impose des limites de taux d'API — ajoute retry: 3 sur les tâches sensibles.