Périmètre
- Plateforme : BigQuery
- Périmètre : projets lab-a (données) ; régions EU, europe-west1, US
- Niveau de droits : 3 (+ droits et outils (pseudonymisés))
- Mode SQL : lecture seule
- Lectures : 18 lues sur 22
- Contenu lu : 9 tables, 12 objets, 4 familles de requêtes
- Schémas ou datasets cachés lus : _tmp
- Versions : canot X, duckdb X, sqlglot X
Capacités
Ce rapport est un inventaire : inventorié, ni exporté ni rejoué.
| Niveau | Ce rapport | Canot sur BigQuery |
|---|---|---|
| Inventaire | fait par ce scan (niveau 3) | complet, niveaux 1 à 3 |
| Export | non fait par ce scan | iceberg, avec canot drill |
| Preuve | non faite par ce scan | P1 parité des données ; P2 rejeu de requêtes, avec canot drill |
Connecteur BigQuery : testé ; test consigné : canot drill, 13/10/2026 : jeu public thelook_ecommerce (docs/ecarts.md).
Ce que Canot ne peut pas prouver ici : les formes déclarées (P1, P2) portent sur les tables et les requêtes ; les objets à reconstruire hors tables sont comptés, pas prouvés.
Coûts observés
Fenêtre : 180 jours. À la demande et réservé : deux modes de facturation, jamais additionnés.
À la demande
| Poste | Valeur | Nature et base |
|---|---|---|
| Octets facturés | 3,8 To | mesuré · B10, B11, B12 |
| Requêtes | 1 200 requêtes | mesuré · B10, B11, B12 |
| En dollars | 0,00 $ à 21,88 $
| estimé, confiance basse · B10, B11, B12 Tio facturés × prix catalogue, palier gratuit déduit ou non |
Réservé
| Poste | Valeur | Nature et base |
|---|---|---|
| Slot-heures | 820,5 slot-heures | mesuré · B10, B11, B12 |
| Requêtes | 300 requêtes | mesuré · B10, B11, B12 |
| En dollars | Non estimé : prix de votre contrat non lu. | non estimé |
À la demande et réservé ne s'additionnent pas : deux modes de facturation, deux bases.
Stockage
| Poste | Valeur | Nature et base |
|---|---|---|
| Stockage moyen facturé | Non lu : non transmis par la collecte. | non lu |
| Stockage en dollars | Non estimé : prix de votre contrat non lu. | non estimé |
Mouvements
2 figée(s), 7 vivante(s), 0 recréée(s), 0 non déterminée(s).
recréée : DDL de moins de 7 jours sans écriture postérieure ; vivante : écriture de moins de 30 jours ; figée : dernière écriture plus ancienne ; non déterminée : écritures non lues. Base : B03, B04, B05, B07, B10, B11 ….
| Table | Type | Volume | Mouvement | Preuve |
|---|---|---|---|---|
| lab-a.archive.archive_2023 | TABLE | 3 Go | figée | dernière écriture le 01/03/2025 |
| lab-a.raw.orders | TABLE | 900 Mo | vivante | dernière écriture le 15/10/2026 |
| lab-a.raw.read_by_api_only | TABLE | 700 Mo | figée | dernière écriture le 01/09/2026 |
| lab-a.raw.customers | TABLE | 200 Mo | vivante | dernière écriture le 15/10/2026 |
| lab-a.raw.events_20261001 | TABLE | 120 Mo | vivante | dernière écriture le 15/10/2026 |
| lab-a._tmp.scratch | TABLE | 50 Mo | vivante | dernière écriture le 15/10/2026 |
| lab-a.raw.orders_snap | SNAPSHOT | 10 Mo | vivante | dernière écriture le 15/10/2026 |
| lab-a.ext.gcs_events | EXTERNE | non lu | vivante | dernière écriture le 15/10/2026 |
| lab-a.ext.sheet_targets | EXTERNE | non lu | vivante | dernière écriture le 15/10/2026 |
Ce qui ne part pas avec la copie
Objets à reconstruire ou à décrire
| Type | Nombre | Exemples |
|---|---|---|
| fonction | 1 | lab-a.mart.js_clean |
| modèle ML | 1 | lab-a.ml.churn |
| partage | 1 | lab-a.hub.listing_sales |
| politique de lignes | 1 | lab-a.raw.rap_country |
| procédure | 1 | lab-a.mart.sp_rebuild |
| requête planifiée | 4 | lab-a.sq_daily_kpi, lab-a.sq_export, lab-a.sq_old, lab-a.sq_weekly |
| vue | 2 | lab-a.mart.v_legacy, lab-a.mart.v_sheet |
| vue matérialisée | 1 | lab-a.mart.mv_daily |
Routines par langage : JAVASCRIPT 1, SQL 1.
Colonnes à type propre à la plateforme (3)
| Table | Colonne | Type |
|---|---|---|
| lab-a.raw.customers | geo | GEOGRAPHY |
| lab-a.raw.events_20261001 | payload | JSON |
| lab-a.raw.events_20261001 | ctx | STRUCT<a INT64, b STRING> |
Historique facturé
| Poste | Valeur | Nature et base |
|---|---|---|
| Time Travel et Fail-safe (1 table) | 250 Mo | calculé · B07 Time Travel + Fail-safe des tables présentes, + octets encore facturés des tables supprimées |
Dépendances
Dépendances externes (F01)
| Objet | Type | Emplacement |
|---|---|---|
| lab-a.ext.gcs_events | table | gs://lab-bucket |
| lab-a.ext.sheet_targets | table | docs.google.com |
Dépendances externes cachées (F02)
| Objet | Chemin | Emplacement |
|---|---|---|
| lab-a.mart.v_sheet | lab-a.mart.v_sheet → lab-a.ext.sheet_targets | docs.google.com |
Écritures hors de la plateforme (F03)
| Source | Mode | Destination |
|---|---|---|
| famille 066b5f1f3a39 | observé | gs://bucket-x |
| objet lab-a.sq_export | déclaré | gs://lab-exports |
Consommateurs externes (F09)
| Partage | Comptes |
|---|---|
| lab-a.hub.listing_sales | 1 |
Outils vus dans les requêtes
| Outil | Familles | Exécutions |
|---|---|---|
| non identifié | 3 | 903 |
| looker | 1 | 10 |
Rejouabilité des requêtes
| Catégorie | Signification | Familles | Exécutions | Poids |
|---|---|---|---|---|
| C0 | traduit et accepté par DuckDB | 1 | 10 | 1 Mo |
| C1 | non analysable | 0 | 0 | 0 o |
| C2 | commande, non analysée | 0 | 0 | 0 o |
| C3 | traduction impossible | 0 | 0 | 0 o |
| C4 | erreur d'analyse DuckDB | 1 | 1 | non lu |
| C5 | erreur de liaison (objet ou fonction propre) | 1 | 900 | 2 To |
| C6 | variable | 0 | 0 | 0 o |
| C7 | DDL, COPY, MERGE, requêtes de métadonnées : comptés à part | 1 | 2 | 50 ko |
| Poste | Valeur | Nature et base |
|---|---|---|
| Taux C0, par familles | 33,3 % | calculé · B10, B11, B12 traduit et accepté par DuckDB (C0) / C0 à C6 ; C7 compté à part |
| Taux C0, par exécutions | 1,1 % | calculé · B10, B11, B12 traduit et accepté par DuckDB (C0) / C0 à C6 ; C7 compté à part |
| Taux C0, pondéré | 0,0 %
| calculé · B10, B11, B12 traduit et accepté par DuckDB (C0) / C0 à C6 ; C7 compté à part |
Base : 1/3 familles, fenêtre non lue, sqlglot X, duckdb X.
accepté ≠ résultat identique. Traduit vers DuckDB, non comparé.
1 famille contenant un secret, comptée(s) puis écartée(s).
Fonctions propres à la plateforme
| Fonction | Familles |
|---|---|
| predict | 1 |
Familles les plus exécutées (formes normalisées)
| Catégorie | Exécutions | Outil | Forme normalisée |
|---|---|---|---|
| C5 | 900 | SELECT * FROM `lab-a.raw.orders` WHERE d >= ? | |
| C0 | 10 | looker | SELECT count(*) FROM `lab-a.raw.customers` |
| C7 | 2 | EXPORT DATA OPTIONS (uri=?, FORMAT=?) AS SELECT * FROM `lab-a.raw.orders` | |
| C4 | 1 | SELECT ML.PREDICT(MODEL `lab-a.raw.m`, (SELECT ?)) |
Fourchettes
Estimations de planification : chaque fourchette porte ses hypothèses. Un canot drill remplace le débit supposé par la mesure.
| Poste | Valeur | Nature et base |
|---|---|---|
| Volume à copier | 5 Go
| calculé · B07 somme des octets actifs |
| Durée de lecture de la copie | 1 min à 4 min
| estimé, confiance basse · B07 volume ÷ débit supposé |
| Coût de lecture de la copie | Non estimé : prix de votre contrat non lu.
| non estimé |
| Travail de reprise | 3,0 j à 18,0 j
| estimé, confiance basse · B13, B19, B20 objets × jours par objet + colonnes × jours par colonne |
Constats
Chaque constat est étiqueté « À examiner », sans niveau de gravité. Il dit ce qui est observé et ce qui ne l'est pas.
F01 · Dépendance externeÀ examiner
2 constats
| Cible | Observé |
|---|---|
| table lab-a.ext.gcs_events | Table externe : données hors de la plateforme (gs://lab-bucket). |
| table lab-a.ext.sheet_targets | Table externe : données hors de la plateforme (docs.google.com). |
F02 · Dépendance externe cachéeÀ examiner
1 constat
| Cible | Observé |
|---|---|
| objet lab-a.mart.v_sheet | Dépend de lab-a.ext.sheet_targets, hors de la plateforme, par 1 niveau : lab-a.mart.v_sheet → lab-a.ext.sheet_targets (docs.google.com). |
F03 · Écriture hors de la plateformeÀ examiner
2 constats
| Cible | Observé |
|---|---|
| famille 066b5f1f3a39 | Écriture hors de la plateforme observée : 2 exécutions ; destination : gs://bucket-x. |
| objet lab-a.sq_export | Requête planifiée qui écrit hors de la plateforme (déclaré dans sa définition) ; destination : gs://lab-exports. |
F05 · Stockage sans lecture observéeÀ examiner
2 constats
| Cible | Observé |
|---|---|
| table lab-a.archive.archive_2023 | 3 Go stockés. Aucune lecture observée dans INFORMATION_SCHEMA.JOBS du 20/04/2026 au 17/10/2026 ; non vus : lectures par l'API Storage Read, requêtes lancées depuis d'autres projets, consommateurs Analytics Hub. |
| table lab-a.raw.read_by_api_only | 700 Mo stockés. Aucune lecture observée dans INFORMATION_SCHEMA.JOBS du 20/04/2026 au 17/10/2026 ; non vus : lectures par l'API Storage Read, requêtes lancées depuis d'autres projets, consommateurs Analytics Hub. |
F06 · Historique payé non transférableÀ examiner
1 constat
| Cible | Observé |
|---|---|
| table lab-a.raw.orders | 250 Mo d'historique facturé (Time Travel et Fail-safe), rétention 7 jours, pour 900 Mo actifs ; cet historique ne part pas avec la copie. |
F08 · SQL dynamiqueÀ examiner
1 constat
| Cible | Observé |
|---|---|
| objet lab-a.mart.sp_rebuild | Procédure en SQL : construit du SQL à l'exécution ; les objets touchés ne se lisent pas dans le code. |
F09 · Consommateurs externesÀ examiner
1 constat
| Cible | Observé |
|---|---|
| objet lab-a.hub.listing_sales | Partage vers 1 abonné ; 1 objet partagé. Les lectures des consommateurs ne sont pas vues par ce scan. |
F10 · Sécurité à reconstruireÀ examiner
2 constats
| Cible | Observé |
|---|---|
| objet lab-a.raw.rap_country | Politique de lignes appliquée à 1 objet ; elle ne part pas avec la copie ; la copie demande un principal non filtré. |
| table lab-a.raw.customers | Politiques : pt-pii, rap_country. Elles ne partent pas avec la copie ; la copie demande un principal non filtré par ces politiques. |
F11 · Chaîne planifiée et ses échecsÀ examiner
4 constats
| Cible | Observé |
|---|---|
| objet lab-a.sq_daily_kpi | Requête planifiée, planification every 24 hours, état actif ; 180 exécutions, 3 échecs, dernière le 17/10/2026. |
| objet lab-a.sq_export | Requête planifiée, planification every day 05:00, état actif ; 180 exécutions, 0 échec. |
| objet lab-a.sq_old | Requête planifiée, planification every 1 hours, état désactivée ; 0 exécution, 0 échec. |
| objet lab-a.sq_weekly | Requête planifiée, planification every monday 06:00, état actif ; 26 exécutions, 0 échec. |
F12 · Lecture incomplèteÀ examiner
3 constats
| Cible | Observé |
|---|---|
| lecture B15 | API connections.list non lue (droit absent) ; limite : connexions externes (F01). |
| lecture B18 | `region-eu`.INFORMATION_SCHEMA.RESERVATIONS non lue (niveau de droits non demandé) ; limite : capacité réservée. |
| lecture B22 | `region-eu`.INFORMATION_SCHEMA.JOBS_BY_ORGANIZATION non lue (niveau de droits non demandé) ; limite : requêtes lancées depuis d'autres projets. |
Aucun constat pour : F04, F07. Une absence de constat ne vaut que pour les lectures faites (voir F12 et la méthode).
Ce que ce rapport ne chiffre pas
- Stockage moyen facturé : non transmis par la collecte.
- Coût du stockage : prix de votre contrat non lu.
- Réservé, en dollars : prix de votre contrat non lu.
- Coût de lecture de la copie (API Storage Read, sortie réseau) : prix de votre contrat non lu.
- Tarif de votre contrat : prix de votre contrat non lu.
- Stockage d'arrivée, double exploitation, fonctionnement après la sortie : dépendent de votre contrat et de votre architecture.
- Résultat identique des requêtes traduites : accepté ≠ résultat identique : traduit vers DuckDB, non comparé ; un canot drill compare les résultats.
- Projections de coût fournies par la plateforme : non reprises : elles ne se vérifient pas depuis le scan.
- Palier gratuit BigQuery : partagé par le compte de facturation, non imputable par projet.
- Lectures par l'API Storage Read : absentes de INFORMATION_SCHEMA.JOBS.
- Octets facturés des requêtes sous politique de lignes : valeur NULL dans INFORMATION_SCHEMA.JOBS.
Méthode
18 lectures lues sur 22. Chaque lecture est consignée avec son statut et sa raison ; une valeur non lue reste vide, jamais 0.
| Id | Vue | Statut | Raison | Lignes | Fenêtre | Latence |
|---|---|---|---|---|---|---|
| B06 | `region-eu`.INFORMATION_SCHEMA.TABLE_STORAGE | non lu | absent ou non exposé ; limite : aucune : tables.get lue à la place | non lu | ||
| B15 | API connections.list | non lu | droit absent ; limite : connexions externes (F01) | non lu | ||
| B18 | `region-eu`.INFORMATION_SCHEMA.RESERVATIONS | non lu | niveau de droits non demandé ; limite : capacité réservée | non lu | ||
| B22 | `region-eu`.INFORMATION_SCHEMA.JOBS_BY_ORGANIZATION | non lu | niveau de droits non demandé ; limite : requêtes lancées depuis d'autres projets | non lu | ||
| B01 | API datasets.list | lu | 10 | |||
| B02 | API datasets.get | lu | 10 | |||
| B03 | `region-eu`.INFORMATION_SCHEMA.TABLES | lu | 10 | |||
| B04 | `region-europe-west1`.INFORMATION_SCHEMA.TABLES | lu | 10 | |||
| B05 | `region-us`.INFORMATION_SCHEMA.TABLES | lu | 10 | |||
| B07 | API tables.get | lu | 10 | |||
| B08 | `region-eu`.INFORMATION_SCHEMA.TABLE_OPTIONS | lu | 10 | |||
| B09 | `region-eu`.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS | lu | 10 | |||
| B10 | `region-eu`.INFORMATION_SCHEMA.JOBS | lu | 10 | du 20/04/2026 au 17/10/2026 | 0,1 h | |
| B11 | `region-europe-west1`.INFORMATION_SCHEMA.JOBS | lu | 10 | du 20/04/2026 au 17/10/2026 | 0,1 h | |
| B12 | `region-us`.INFORMATION_SCHEMA.JOBS | lu | 10 | du 20/04/2026 au 17/10/2026 | 0,1 h | |
| B13 | API transferConfigs.list | lu | 10 | |||
| B14 | API rowAccessPolicies.list | lu | 10 | |||
| B16 | `region-eu`.INFORMATION_SCHEMA.SCHEMATA_LINKS | lu | 10 | |||
| B17 | `region-eu`.INFORMATION_SCHEMA.SHARED_DATASET_USAGE | lu | 10 | |||
| B19 | `region-eu`.INFORMATION_SCHEMA.ROUTINES | lu | 10 |
… et 2 autres dans lectures.csv.
Droits utilisés
Niveau 3 : bigquery.jobs.create, jobs.listAll, datasets.get, tables.list, tables.get, routines.list, routines.get, models.list, models.getMetadata, rowAccessPolicies.list, transfers.get, connections.list, dataPolicies.list (optionnelles), reservations.list, reservationAssignments.list, capacityCommitments.list, droits d'organisation. Jamais demandés : tables.getData, rôles bigquery.user et jobUser.
Coût du scan
| Poste | Valeur | Nature et base |
|---|---|---|
| Requêtes émises | 20 requêtes
| calculé · B01, B02, B03, B04, B05, B06 … lectures tentées, lues ou refusées par la plateforme |
| Durée de lecture | Non lu : durée non transmise par la collecte. | non lu |
Garde-fous
- Tout SQL envoyé passe par une garde lecture seule : seules les instructions SELECT, SHOW, DESCRIBE et ALTER SESSION SET partent. Aucune écriture, aucune activation d'API, aucune modification de paramètre.
- Utilisateurs et rôles des requêtes pseudonymisés par HMAC, avec un sel tiré pour ce scan et jamais écrit ; valeurs d'étiquettes hachées ; emplacements réduits au compartiment.
- Le texte SQL brut n'est jamais écrit : seules les formes normalisées, littéraux masqués, sortent de la collecte.
Règles
- Mouvement : recréée : DDL de moins de 7 jours sans écriture postérieure ; vivante : écriture de moins de 30 jours ; figée : dernière écriture plus ancienne ; non déterminée : écritures non lues.
- Stockage sans lecture : fenêtre réelle de la vue lue, comparée à 180 jours ; les angles morts de chaque vue sont cités dans le constat.
- Durée de copie : débit supposé de 20 à 80 Mo/s.
- Les prix catalogue sont datés et sourcés ; ils ne remplacent pas le prix de votre contrat.
Suite
Ce rapport décrit votre plateforme ; il ne recommande ni de partir ni de rester.
Pour mesurer une sortie sur un périmètre choisi : canot drill copie vers Apache Iceberg, compare source et copie, et signe un dossier de preuve.
Pour aller plus loin, le diagnostic q4o, dès 22 000 € HT : tarif de votre contrat, exécution réelle, scénarios, marche à suivre. canot.io