canotExit scan · Scan de sortie

Diffusion interne

Scan de sortie : BigQuery

Constats au 2026-10-17 10:00 UTC · données en retard de 0,1 h au plus selon la vue · édition : non déterminée · Canot X

DSI

9 tables présentes (5 Go) et 11 objets à reconstruire en plus des tables. Mouvement : 2 figées, 7 vivantes, 0 recréée, 0 non déterminée. Rejouabilité : 1/3 familles acceptées par DuckDB ; accepté ≠ résultat identique.

DAF

Mesuré sur 180 jours : 3,8 To facturés à la demande, 820,5 heures-slot réservées ; les deux ne s'additionnent pas. À la demande, fourchette au prix catalogue : 0,00 $ à 21,88 $ ; réservé, non estimé : prix de votre contrat non lu. Historique facturé qui ne part pas avec la copie : 250 Mo sur 1 table (F06, F07).

RSSI

2 tables ou politiques à reconstruire côté sécurité (F10) ; la copie exige un principal non filtré. 3 dépendances externes (F01, F02), 2 écritures hors de la plateforme (F03), 1 partage avec des consommateurs externes (F09). Rôles propriétaires (F04) : sans objet sur BigQuery, où les droits sont portés par les datasets et les tables.

Périmètre

  • Plateforme : BigQuery
  • Périmètre : projet 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 faites 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é.

NiveauCe rapportCanot sur BigQuery
Inventairefait par ce scan (niveau 3)complet, niveaux 1 à 3
Exportnon fait par ce scaniceberg, avec canot drill
Preuvenon faite par ce scanP1 parité des données ; P2 rejeu des requêtes, avec canot drill

Connecteur BigQuery : testé ; test enregistré : canot drill, 2026-10-13 : dataset public thelook_ecommerce (docs/ecarts.md).

Ce que Canot ne peut pas prouver ici : les formes déclarées (P1, P2) couvrent les tables et les requêtes ; les objets à reconstruire hors tables sont comptés, non prouvés.

Coûts observés

Fenêtre : 180 jours. À la demande et réservé : deux modèles de facturation, jamais additionnés.

À la demande

ÉlémentValeurNature et base
Octets facturés3,8 Tomesuré · B10, B11, B12
Requêtes1 200 requêtesmesuré · B10, B11, B12
En dollars0,00 $ à 21,88 $
  • prix catalogue à la demande au 17/10/2026 : 6,25 $ par TiB (tarif US ; région à confirmer), https://cloud.google.com/bigquery/pricing
  • haut : aucune gratuité déduite ; bas : 1 TiB gratuit par mois touché par la fenêtre ; la gratuité est partagée par le compte de facturation, elle ne peut pas être attribuée par projet
  • prix de votre contrat non lu
  • octets facturés NULL pour les requêtes sur des tables sous politique d'accès aux lignes : non comptés
estimé, confiance basse · B10, B11, B12
TiB facturés × prix catalogue, gratuité déduite ou non

Réservé

ÉlémentValeurNature et base
Heures-slot820,5 heures-slotmesuré · B10, B11, B12
Requêtes300 requêtesmesuré · B10, B11, B12
En dollarsNon estimé : prix de votre contrat non lu.non estimé

À la demande et réservé ne s'additionnent pas : deux modèles de facturation, deux bases.

Stockage

ÉlémentValeurNature et base
Stockage facturé moyenNon lu : non fourni par la collecte.non lu
Stockage en dollarsNon estimé : prix de votre contrat non lu.non estimé

Mouvements

2 figées, 7 vivantes, 0 recréée, 0 non déterminée.

recréée : DDL de moins de 7 jours sans écriture ulté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 ….

TableTypeVolumeMouvementPreuve
lab-a.archive.archive_2023TABLE3 Gofigéedernière écriture le 2025-03-01
lab-a.raw.ordersTABLE900 Movivantedernière écriture le 2026-10-15
lab-a.raw.read_by_api_onlyTABLE700 Mofigéedernière écriture le 2026-09-01
lab-a.raw.customersTABLE200 Movivantedernière écriture le 2026-10-15
lab-a.raw.events_20261001TABLE120 Movivantedernière écriture le 2026-10-15
lab-a._tmp.scratchTABLE50 Movivantedernière écriture le 2026-10-15
lab-a.raw.orders_snapSNAPSHOT10 Movivantedernière écriture le 2026-10-15
lab-a.ext.gcs_eventsEXTERNEnon luvivantedernière écriture le 2026-10-15
lab-a.ext.sheet_targetsEXTERNEnon luvivantedernière écriture le 2026-10-15

Ce qui ne part pas avec la copie

Objets à reconstruire ou à décrire

TypeNombreExemples
fonction1lab-a.mart.js_clean
modèle ML1lab-a.ml.churn
partage1lab-a.hub.listing_sales
politique d'accès aux lignes1lab-a.raw.rap_country
procédure1lab-a.mart.sp_rebuild
requête planifiée4lab-a.sq_daily_kpi, lab-a.sq_export, lab-a.sq_old, lab-a.sq_weekly
vue2lab-a.mart.v_legacy, lab-a.mart.v_sheet
vue matérialisée1lab-a.mart.mv_daily

Routines par langage : JAVASCRIPT 1, SQL 1.

Colonnes de type propre à la plateforme (3)

TableColonneType
lab-a.raw.customersgeoGEOGRAPHY
lab-a.raw.events_20261001payloadJSON
lab-a.raw.events_20261001ctxSTRUCT<a INT64, b STRING>

Historique facturé

ÉlémentValeurNature et base
Time Travel et Fail-safe (1 table)250 Mocalculé · B07
Time Travel + Fail-safe des tables présentes, + octets encore facturés des tables supprimées

Dépendances

Dépendances externes (F01)

ObjetTypeEmplacement
lab-a.ext.gcs_eventstablegs://lab-bucket
lab-a.ext.sheet_targetstabledocs.google.com

Dépendances externes cachées (F02)

ObjetCheminEmplacement
lab-a.mart.v_sheetlab-a.mart.v_sheet → lab-a.ext.sheet_targetsdocs.google.com

Écritures hors de la plateforme (F03)

SourceModeDestination
famille 066b5f1f3a39observégs://bucket-x
objet lab-a.sq_exportdéclarégs://lab-exports

Consommateurs externes (F09)

PartageComptes
lab-a.hub.listing_sales1

Outils vus dans les requêtes

OutilFamillesExécutions
non identifié3903
looker110

Rejouabilité des requêtes

CatégorieSignificationFamillesExécutionsPoids
C0traduite et acceptée par DuckDB1101 Mo
C1non analysable000 o
C2commande, non analysée000 o
C3traduction impossible000 o
C4erreur d'analyse DuckDB11non lu
C5erreur de liaison (objet ou fonction propre à la plateforme)19002 To
C6variable000 o
C7DDL, COPY, MERGE, requêtes de métadonnées : comptées à part1250 ko
ÉlémentValeurNature et base
Taux C0, par familles33,3 %calculé · B10, B11, B12
traduite et acceptée par DuckDB (C0) / C0 à C6 ; C7 compté à part
Taux C0, par exécutions1,1 %calculé · B10, B11, B12
traduite et acceptée par DuckDB (C0) / C0 à C6 ; C7 compté à part
Taux C0, pondéré0,0 %
  • poids lu pour 2/3 familles
calculé · B10, B11, B12
traduite et acceptée 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 puis écartée.

Fonctions propres à la plateforme

FonctionFamilles
predict1

Familles les plus exécutées (formes normalisées)

CatégorieExécutionsOutilForme normalisée
C5900SELECT * FROM `lab-a.raw.orders` WHERE d >= ?
C010lookerSELECT count(*) FROM `lab-a.raw.customers`
C72EXPORT DATA OPTIONS (uri=?, FORMAT=?) AS SELECT * FROM `lab-a.raw.orders`
C41SELECT ML.PREDICT(MODEL `lab-a.raw.m`, (SELECT ?))

Fourchettes

Estimations de cadrage : chaque fourchette porte ses hypothèses. Un canot drill remplace le débit supposé par une mesure.

ÉlémentValeurNature et base
Volume à copier5 Go
  • octets actifs des tables présentes, hors tables externes et temporaires
calculé · B07
somme des octets actifs
Durée de lecture de la copie1 min à 4 min
  • débit supposé de 20 à 80 Mo/s, remplacé par la mesure d'un canot drill
estimé, confiance basse · B07
volume ÷ débit supposé
Coût de lecture de la copieNon estimé : prix de votre contrat non lu.
  • lecture par la Storage Read API, facturée par TiB lu, et sortie réseau hors de Google Cloud
non estimé
Reprise3,0 j à 18,0 j
  • 11 objets à reconstruire et 3 colonnes de type propre à la plateforme
  • hypothèses q4o : 0,25 à 1,5 jour par objet, 0,1 à 0,5 par colonne, à discuter
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

CibleObservé
table lab-a.ext.gcs_eventsTable externe : données hors de la plateforme (gs://lab-bucket).
table lab-a.ext.sheet_targetsTable externe : données hors de la plateforme (docs.google.com).

F02 · Dépendance externe cachéeÀ examiner

1 constat

CibleObservé
objet lab-a.mart.v_sheetDépend de lab-a.ext.sheet_targets, hors de la plateforme, à travers 1 niveau : lab-a.mart.v_sheet → lab-a.ext.sheet_targets (docs.google.com).

F03 · Écriture hors de la plateformeÀ examiner

2 constats

CibleObservé
famille 066b5f1f3a39Écriture hors de la plateforme observée : 2 exécutions ; destination : gs://bucket-x.
objet lab-a.sq_exportRequête planifiée qui écrit hors de la plateforme (écriture déclarée dans sa définition) ; destination : gs://lab-exports.

F05 · Stockage sans lecture observéeÀ examiner

2 constats

CibleObservé
table lab-a.archive.archive_20233 Go stockés. Aucune lecture observée dans INFORMATION_SCHEMA.JOBS du 2026-04-20 au 2026-10-17 ; angles morts : lectures par la Storage Read API, requêtes lancées depuis d'autres projets, consommateurs Analytics Hub.
table lab-a.raw.read_by_api_only700 Mo stockés. Aucune lecture observée dans INFORMATION_SCHEMA.JOBS du 2026-04-20 au 2026-10-17 ; angles morts : lectures par la Storage Read API, requêtes lancées depuis d'autres projets, consommateurs Analytics Hub.

F06 · Historique facturé qui ne se transfère pasÀ examiner

1 constat

CibleObservé
table lab-a.raw.orders250 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

CibleObservé
objet lab-a.mart.sp_rebuildProcédure (SQL) : construit du SQL à l'exécution ; les objets touchés ne peuvent pas être lus dans le code.

F09 · Consommateurs externesÀ examiner

1 constat

CibleObservé
objet lab-a.hub.listing_salesPartage vers 1 abonné ; 1 objet partagé. Les lectures des consommateurs ne sont pas vues par ce scan.

F10 · Sécurité à reconstruireÀ examiner

2 constats

CibleObservé
objet lab-a.raw.rap_countryPolitique d'accès aux lignes appliquée à 1 objet ; elle ne part pas avec la copie ; la copie exige un principal non filtré.
table lab-a.raw.customersPolitiques : pt-pii, rap_country. Elles ne partent pas avec la copie ; la copie exige un principal non filtré par ces politiques.

F11 · Chaîne planifiée et ses échecsÀ examiner

4 constats

CibleObservé
objet lab-a.sq_daily_kpiRequête planifiée, planification every 24 hours, état active ; 180 exécutions, 3 échecs, dernière le 2026-10-17.
objet lab-a.sq_exportRequête planifiée, planification every day 05:00, état active ; 180 exécutions, 0 échec.
objet lab-a.sq_oldRequête planifiée, planification every 1 hours, état disabled ; 0 exécution, 0 échec.
objet lab-a.sq_weeklyRequête planifiée, planification every monday 06:00, état active ; 26 exécutions, 0 échec.

F12 · Lecture incomplèteÀ examiner

3 constats

CibleObservé
lecture B15API connections.list non lu (droit absent) ; limite : connexions externes (F01).
lecture B18`region-eu`.INFORMATION_SCHEMA.RESERVATIONS non lu (niveau de droits non demandé) ; limite : capacité réservée.
lecture B22`region-eu`.INFORMATION_SCHEMA.JOBS_BY_ORGANIZATION non lu (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 facturé moyen : non fourni 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 (Storage Read API, sortie réseau) : prix de votre contrat non lu.
  • Votre tarif contractuel : prix de votre contrat non lu.
  • Stockage de destination, fonctionnement en parallèle des deux plateformes, exploitation après la sortie : dépendent de votre contrat et de votre architecture.
  • Résultats identiques des requêtes traduites : accepté ≠ résultat identique ; traduites vers DuckDB, non comparées ; un canot drill compare les résultats.
  • Projections de coût fournies par la plateforme : non utilisées, car elles ne peuvent pas être vérifiées depuis le scan.
  • Gratuité BigQuery : partagée par le compte de facturation, ne peut pas être attribuée par projet.
  • Lectures par la Storage Read API : absentes d'INFORMATION_SCHEMA.JOBS.
  • Octets facturés des requêtes sous politique d'accès aux lignes : valeur NULL dans INFORMATION_SCHEMA.JOBS.

Utiliser ce rapport pour vos travaux réglementaires (RGPD, DORA, NIS2, Data Act, SecNumCloud, ABE)

Ces éléments peuvent appuyer vos propres travaux sur le RGPD, DORA, NIS2, le Data Act, SecNumCloud ou les orientations de l'ABE sur l'externalisation. Ce sont des éléments de preuve, pas une conclusion : ce rapport n'est pas une certification, ce n'est pas un conseil juridique, et il ne dit pas si vos contrats ou votre organisation satisfont à une réglementation.

CadreCe qu'il demande, en brefCe que ce rapport vous apporteCe qu'il ne couvre pas
DORA (règlement (UE) 2022/2554)Art. 28, § 8, et art. 30, § 3, point f) : une transition réaliste, avec une période adéquate.Le débit mesuré et une fourchette de temps de reprise issus de l'exercice ; une fourchette de durée de copie (estimée) dans le scan.Hors validation humaine et bascule de vos applications.
DORA (règlement (UE) 2022/2554)Art. 28 : savoir ce qui dépend du prestataire TIC.Ce qui ne se déplace pas tel quel : vues, routines, tâches, politiques, dépendances externes, avec les éléments à l'appui de chaque constat.Un inventaire de la plateforme, pas de vos contrats ni des applications qui y sont connectées.
Data Act (règlement (UE) 2023/2854)Art. 29 : les frais de changement sont supprimés à partir du 12 janvier 2027.L'effort qui reste à votre charge : coût de lecture, durée de copie et estimations de reprise, chacun marqué mesuré, calculé ou estimé.Ne dit rien des frais que votre prestataire peut encore appliquer avant cette date. Les prix sont des tarifs catalogue datés, pas votre contrat.
RGPD (règlement (UE) 2016/679)Chapitre V (transferts) et art. 32 (sécurité du traitement).L'endroit où la copie est hébergée, et les objets de sécurité qui ne la suivent pas (politiques de masquage et d'accès aux lignes, tags).Le lieu d'hébergement est la destination que vous avez choisie. L'appréciation juridique d'un transfert vous revient.
RGPD (règlement (UE) 2016/679)Art. 5, § 1, point c) : minimisation des données.Le scan lit les métadonnées et l'historique d'exécution, pas le contenu des tables. Le texte SQL est masqué et les identités sont pseudonymisées.Vaut pour le scan seulement : un exercice de sortie (drill) lit les données qu'il copie.
NIS2 (directive (UE) 2022/2555)Art. 21, § 2, point d) : sécurité de la chaîne d'approvisionnement, y compris la relation avec chaque prestataire direct.Ce qui vous lie à ce prestataire : dépendances externes et objets qui ne se déplacent pas tels quels, avec les éléments à l'appui de chaque constat.N'évalue pas les mesures de sécurité du prestataire.
Orientations de l'ABE sur l'externalisation (EBA/GL/2019/02)Stratégies de sortie : documentées, réalistes, suffisamment testées et réexaminées périodiquement, pour les externalisations visées par les orientations.L'exercice de sortie (drill) et l'inventaire de ce qui ne se déplace pas (scan), comme éléments de test dans votre dossier de sortie.Un exercice. Les prestataires alternatifs, le volet métier et le réexamen périodique vous reviennent. Vérifiez quel texte s'applique à vous en plus de DORA.

Références arrêtées au 2026-10-19. Vérifiez les textes en vigueur : ils évoluent, et leur application dépend de votre situation.

Méthode

18 lectures faites sur 22. Chaque lecture est enregistrée avec son statut et son motif ; une valeur non lue reste vide, jamais 0.

IdVueStatutMotifLignesFenêtreLatence
B06`region-eu`.INFORMATION_SCHEMA.TABLE_STORAGEnon luabsent ou non exposé ; limite : aucune : tables.get lu à la placenon lu
B15API connections.listnon ludroit absent ; limite : connexions externes (F01)non lu
B18`region-eu`.INFORMATION_SCHEMA.RESERVATIONSnon luniveau de droits non demandé ; limite : capacité réservéenon lu
B22`region-eu`.INFORMATION_SCHEMA.JOBS_BY_ORGANIZATIONnon luniveau de droits non demandé ; limite : requêtes lancées depuis d'autres projetsnon lu
B01API datasets.listlu10
B02API datasets.getlu10
B03`region-eu`.INFORMATION_SCHEMA.TABLESlu10
B04`region-europe-west1`.INFORMATION_SCHEMA.TABLESlu10
B05`region-us`.INFORMATION_SCHEMA.TABLESlu10
B07API tables.getlu10
B08`region-eu`.INFORMATION_SCHEMA.TABLE_OPTIONSlu10
B09`region-eu`.INFORMATION_SCHEMA.COLUMN_FIELD_PATHSlu10
B10`region-eu`.INFORMATION_SCHEMA.JOBSlu10du 2026-04-20 au 2026-10-170,1 h
B11`region-europe-west1`.INFORMATION_SCHEMA.JOBSlu10du 2026-04-20 au 2026-10-170,1 h
B12`region-us`.INFORMATION_SCHEMA.JOBSlu10du 2026-04-20 au 2026-10-170,1 h
B13API transferConfigs.listlu10
B14API rowAccessPolicies.listlu10
B16`region-eu`.INFORMATION_SCHEMA.SCHEMATA_LINKSlu10
B17`region-eu`.INFORMATION_SCHEMA.SHARED_DATASET_USAGElu10
B19`region-eu`.INFORMATION_SCHEMA.ROUTINESlu10

… et 2 de plus dans reads.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 (facultatif), reservations.list, reservationAssignments.list, capacityCommitments.list, permissions au niveau de l'organisation. Jamais demandés : tables.getData, rôles bigquery.user et jobUser.

Coût du scan

ÉlémentValeurNature et base
Requêtes envoyées20 requêtes
  • une lecture = une requête
calculé · B01, B02, B03, B04, B05, B06 …
lectures tentées, lues ou refusées par la plateforme
Durée de lectureNon lu : durée non fournie par la collecte.non lu

Garde-fous

  • Chaque instruction SQL envoyée passe par une garde lecture seule : seules les instructions SELECT, SHOW, DESCRIBE et ALTER SESSION SET sortent. Aucune écriture, aucune activation d'API, aucun changement 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 bucket.
  • 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 ulté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 listé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 la source et la copie, et signe un dossier de preuve.

Pour aller plus loin, le diagnostic q4o, dès 22 000 € HT : votre tarif contractuel, l'exécution réelle, des scénarios, les étapes à suivre. canot.io

Internal distribution

Exit scan: BigQuery

Findings as of 2026-10-17 10:00 UTC · data up to 0.1 h behind depending on the view · edition: not determined · Canot X

CIO

9 present tables (5 GB) and 11 objects to rebuild besides tables. Movement: 2 frozen, 7 live, 0 recreated, 0 not determined. Replayability: 1/3 families accepted by DuckDB; accepted ≠ identical result.

CFO

Measured over 180 days: 3.8 TB billed on demand, 820.5 reserved slot-hours; the two do not add up. On-demand, list-price range: $0.00 to $21.88; reserved, not estimated: your contract price not read. Billed history that does not leave with the copy: 250 MB across 1 table (F06, F07).

CISO

2 tables or policies to rebuild on the security side (F10); the copy requires an unfiltered principal. 3 external dependencies (F01, F02), 2 writes outside the platform (F03), 1 share with external consumers (F09). Owner roles (F04): not applicable on BigQuery, where privileges are carried by datasets and tables.

Scope

  • Platform: BigQuery
  • Scope: projects lab-a (data); regions EU, europe-west1, US
  • Privilege level: 3 (+ privileges and tools (pseudonymized))
  • SQL mode: read-only
  • Reads: 18 done out of 22
  • Content read: 9 tables, 12 objects, 4 query families
  • Hidden schemas or datasets read: _tmp
  • Versions: canot X, duckdb X, sqlglot X

Capabilities

This report is an inventory: inventoried, neither exported nor replayed.

LevelThis reportCanot on BigQuery
Inventorydone by this scan (level 3)full, levels 1 to 3
Exportnot done by this scaniceberg, with canot drill
Evidencenot done by this scanP1 data parity; P2 query replay, with canot drill

BigQuery connector: tested; recorded test: canot drill, 2026-10-13: public dataset thelook_ecommerce (docs/ecarts.md).

What Canot cannot prove here: the declared forms (P1, P2) cover tables and queries; objects to rebuild besides tables are counted, not proven.

Observed costs

Window: 180 days. On-demand and reserved: two billing models, never added together.

On demand

ItemValueNature and basis
Billed bytes3.8 TBmeasured · B10, B11, B12
Queries1,200 queriesmeasured · B10, B11, B12
In dollars$0.00 to $21.88
  • on-demand list price as of 17/10/2026: $6.25 per TiB (US rate; region to confirm), https://cloud.google.com/bigquery/pricing
  • high: no free tier deducted; low: 1 free TiB per month touched by the window; the free tier is shared by the billing account, it cannot be attributed per project
  • your contract price not read
  • billed bytes NULL for queries on tables with a row access policy: not counted
estimated, low confidence · B10, B11, B12
billed TiB × list price, free tier deducted or not

Reserved

ItemValueNature and basis
Slot-hours820.5 slot-hoursmeasured · B10, B11, B12
Queries300 queriesmeasured · B10, B11, B12
In dollarsNot estimated: your contract price not read.not estimated

On demand and reserved do not add up: two billing models, two bases.

Storage

ItemValueNature and basis
Average billed storageNot read: not provided by collection.not read
Storage in dollarsNot estimated: your contract price not read.not estimated

Movements

2 frozen, 7 live, 0 recreated, 0 not determined.

recreated: DDL less than 7 days old with no later write; live: write less than 30 days old; frozen: older last write; not determined: writes not read. Based on: B03, B04, B05, B07, B10, B11 ….

TableTypeVolumeMovementEvidence
lab-a.archive.archive_2023TABLE3 GBfrozenlast write on 2025-03-01
lab-a.raw.ordersTABLE900 MBlivelast write on 2026-10-15
lab-a.raw.read_by_api_onlyTABLE700 MBfrozenlast write on 2026-09-01
lab-a.raw.customersTABLE200 MBlivelast write on 2026-10-15
lab-a.raw.events_20261001TABLE120 MBlivelast write on 2026-10-15
lab-a._tmp.scratchTABLE50 MBlivelast write on 2026-10-15
lab-a.raw.orders_snapSNAPSHOT10 MBlivelast write on 2026-10-15
lab-a.ext.gcs_eventsEXTERNALnot readlivelast write on 2026-10-15
lab-a.ext.sheet_targetsEXTERNALnot readlivelast write on 2026-10-15

What does not leave with the copy

Objects to rebuild or describe

TypeCountExamples
function1lab-a.mart.js_clean
ML model1lab-a.ml.churn
share1lab-a.hub.listing_sales
row access policy1lab-a.raw.rap_country
procedure1lab-a.mart.sp_rebuild
scheduled query4lab-a.sq_daily_kpi, lab-a.sq_export, lab-a.sq_old, lab-a.sq_weekly
view2lab-a.mart.v_legacy, lab-a.mart.v_sheet
materialized view1lab-a.mart.mv_daily

Routines per language: JAVASCRIPT 1, SQL 1.

Columns with a platform-specific type (3)

TableColumnType
lab-a.raw.customersgeoGEOGRAPHY
lab-a.raw.events_20261001payloadJSON
lab-a.raw.events_20261001ctxSTRUCT<a INT64, b STRING>

Billed history

ItemValueNature and basis
Time Travel and Fail-safe (1 table)250 MBcomputed · B07
Time Travel + Fail-safe of present tables, + bytes still billed for dropped tables

Dependencies

External dependencies (F01)

ObjectTypeLocation
lab-a.ext.gcs_eventstablegs://lab-bucket
lab-a.ext.sheet_targetstabledocs.google.com

Hidden external dependencies (F02)

ObjectPathLocation
lab-a.mart.v_sheetlab-a.mart.v_sheet → lab-a.ext.sheet_targetsdocs.google.com

Writes outside the platform (F03)

SourceModeDestination
family 066b5f1f3a39observedgs://bucket-x
object lab-a.sq_exportdeclaredgs://lab-exports

External consumers (F09)

ShareAccounts
lab-a.hub.listing_sales1

Tools seen in queries

ToolFamiliesExecutions
unidentified3903
looker110

Query replayability

CategoryMeaningFamiliesExecutionsWeight
C0translated and accepted by DuckDB1101 MB
C1not parseable000 B
C2command, not analyzed000 B
C3translation impossible000 B
C4DuckDB parse error11not read
C5binding error (platform-specific object or function)19002 TB
C6variable000 B
C7DDL, COPY, MERGE, metadata queries: counted separately1250 kB
ItemValueNature and basis
C0 rate, by families33.3%computed · B10, B11, B12
translated and accepted by DuckDB (C0) / C0 to C6; C7 counted separately
C0 rate, by executions1.1%computed · B10, B11, B12
translated and accepted by DuckDB (C0) / C0 to C6; C7 counted separately
C0 rate, weighted0.0%
  • weight read for 2/3 families
computed · B10, B11, B12
translated and accepted by DuckDB (C0) / C0 to C6; C7 counted separately

Based on: 1/3 families, window not read, sqlglot X, duckdb X.

accepted ≠ identical result. Translated to DuckDB, not compared.

1 family containing a secret, counted then set aside.

Platform-specific functions

FunctionFamilies
predict1

Most executed families (normalized forms)

CategoryExecutionsToolNormalized form
C5900SELECT * FROM `lab-a.raw.orders` WHERE d >= ?
C010lookerSELECT count(*) FROM `lab-a.raw.customers`
C72EXPORT DATA OPTIONS (uri=?, FORMAT=?) AS SELECT * FROM `lab-a.raw.orders`
C41SELECT ML.PREDICT(MODEL `lab-a.raw.m`, (SELECT ?))

Ranges

Planning estimates: each range carries its assumptions. A canot drill replaces the assumed throughput with a measurement.

ItemValueNature and basis
Volume to copy5 GB
  • active bytes of present tables, excluding external and temporary tables
computed · B07
sum of active bytes
Copy read time1 min to 4 min
  • assumed throughput of 20 to 80 MB/s, replaced by the measurement of a canot drill
estimated, low confidence · B07
volume ÷ assumed throughput
Copy read costNot estimated: your contract price not read.
  • read through the Storage Read API, billed per TiB read, and network egress out of Google Cloud
not estimated
Rework3.0 d to 18.0 d
  • 11 objects to rebuild and 3 columns with a platform-specific type
  • q4o assumptions: 0.25 to 1.5 day per object, 0.1 to 0.5 per column, open to discussion
estimated, low confidence · B13, B19, B20
objects × days per object + columns × days per column

Findings

Each finding is labeled "To review", with no severity level. It states what is observed and what is not.

F01 · External dependencyTo review

2 findings

TargetObserved
table lab-a.ext.gcs_eventsExternal table: data outside the platform (gs://lab-bucket).
table lab-a.ext.sheet_targetsExternal table: data outside the platform (docs.google.com).

F02 · Hidden external dependencyTo review

1 finding

TargetObserved
object lab-a.mart.v_sheetDepends on lab-a.ext.sheet_targets, outside the platform, through 1 level: lab-a.mart.v_sheet → lab-a.ext.sheet_targets (docs.google.com).

F03 · Write outside the platformTo review

2 findings

TargetObserved
family 066b5f1f3a39Write outside the platform observed: 2 executions; destination: gs://bucket-x.
object lab-a.sq_exportScheduled query that writes outside the platform (declared in its definition); destination: gs://lab-exports.

F05 · Storage with no observed readTo review

2 findings

TargetObserved
table lab-a.archive.archive_20233 GB stored. No read observed in INFORMATION_SCHEMA.JOBS from 2026-04-20 to 2026-10-17; blind spots: reads through the Storage Read API, queries run from other projects, Analytics Hub consumers.
table lab-a.raw.read_by_api_only700 MB stored. No read observed in INFORMATION_SCHEMA.JOBS from 2026-04-20 to 2026-10-17; blind spots: reads through the Storage Read API, queries run from other projects, Analytics Hub consumers.

F06 · Billed history that does not transferTo review

1 finding

TargetObserved
table lab-a.raw.orders250 MB of billed history (Time Travel and Fail-safe), retention 7 days, for 900 MB active; this history does not leave with the copy.

F08 · Dynamic SQLTo review

1 finding

TargetObserved
object lab-a.mart.sp_rebuildProcedure (SQL): builds SQL at run time; the objects it touches cannot be read from the code.

F09 · External consumersTo review

1 finding

TargetObserved
object lab-a.hub.listing_salesShare to 1 subscriber; 1 shared object. Consumer reads are not seen by this scan.

F10 · Security to rebuildTo review

2 findings

TargetObserved
object lab-a.raw.rap_countryRow access policy applied to 1 object; it does not leave with the copy; the copy requires an unfiltered principal.
table lab-a.raw.customersPolicies: pt-pii, rap_country. They do not leave with the copy; the copy requires a principal not filtered by these policies.

F11 · Scheduled chain and its failuresTo review

4 findings

TargetObserved
object lab-a.sq_daily_kpiScheduled query, schedule every 24 hours, state active; 180 runs, 3 failures, last on 2026-10-17.
object lab-a.sq_exportScheduled query, schedule every day 05:00, state active; 180 runs, 0 failures.
object lab-a.sq_oldScheduled query, schedule every 1 hours, state disabled; 0 runs, 0 failures.
object lab-a.sq_weeklyScheduled query, schedule every monday 06:00, state active; 26 runs, 0 failures.

F12 · Incomplete readTo review

3 findings

TargetObserved
read B15API connections.list not read (missing privilege); limits: external connections (F01).
read B18`region-eu`.INFORMATION_SCHEMA.RESERVATIONS not read (privilege level not requested); limits: reserved capacity.
read B22`region-eu`.INFORMATION_SCHEMA.JOBS_BY_ORGANIZATION not read (privilege level not requested); limits: queries run from other projects.

No finding for: F04, F07. An absence of findings only holds for the reads done (see F12 and the method).

What this report does not quantify

  • Average billed storage: not provided by collection.
  • Storage cost: your contract price not read.
  • Reserved, in dollars: your contract price not read.
  • Copy read cost (Storage Read API, network egress): your contract price not read.
  • Your contract rate: your contract price not read.
  • Destination storage, running both platforms in parallel, operations after the exit: depend on your contract and your architecture.
  • Identical results of translated queries: accepted ≠ identical result: translated to DuckDB, not compared; a canot drill compares the results.
  • Cost projections provided by the platform: not used: they cannot be verified from the scan.
  • BigQuery free tier: shared by the billing account, cannot be attributed per project.
  • Reads through the Storage Read API: missing from INFORMATION_SCHEMA.JOBS.
  • Billed bytes of queries under a row access policy: NULL value in INFORMATION_SCHEMA.JOBS.

Using this report for your regulatory work (GDPR, DORA, NIS2, Data Act, SecNumCloud, EBA)

These elements can support your own work on GDPR, DORA, NIS2, the Data Act, SecNumCloud or the EBA outsourcing guidelines. They are evidence, not a finding: this report is not a certification, it is not legal advice, and it does not say whether your contracts or your organization meet any regulation.

FrameworkWhat it asks, in shortWhat this report gives youWhat it does not cover
DORA (Regulation (EU) 2022/2554)Art. 28(8) and 30(3)(f): a realistic transition, with an adequate period.Measured throughput and a recovery time range from the exercise; a copy duration range (estimated) in the scan.Excludes human validation and the cutover of your applications.
DORA (Regulation (EU) 2022/2554)Art. 28: knowing what depends on the ICT provider.What does not move as is: views, routines, tasks, policies, external dependencies, with the evidence behind each finding.An inventory of the platform, not of your contracts or of the applications connected to it.
Data Act (Regulation (EU) 2023/2854)Art. 29: switching charges are withdrawn from 12 January 2027.The effort that remains yours: read cost, copy duration and rework estimates, each marked measured, computed or estimated.Says nothing about charges your provider may still apply before that date. Prices are dated catalogue figures, not your contract.
GDPR (Regulation (EU) 2016/679)Chapter V (transfers) and Art. 32 (security of processing).Where the copy is hosted, and which security objects do not move with it (masking and row policies, tags).The hosting location is the destination you chose. The legal assessment of a transfer is yours.
GDPR (Regulation (EU) 2016/679)Art. 5(1)(c): data minimisation.The scan reads metadata and execution history, not table contents. SQL text is masked and identities are pseudonymised.Applies to the scan only: an exit exercise (drill) reads the data it copies.
NIS2 (Directive (EU) 2022/2555)Art. 21(2)(d): security of the supply chain, including your relationship with each direct service provider.What ties you to this provider: external dependencies and objects that do not move as is, with the evidence behind each finding.Does not assess the provider's security measures.
EBA Guidelines on outsourcing arrangements (EBA/GL/2019/02)Exit strategies: documented, realistic, sufficiently tested and reviewed periodically for the outsourcing the guidelines target.The exit exercise (drill) and the inventory of what does not move (scan), as test evidence in your exit file.One exercise. Alternative providers, the business side and the periodic review are yours. Check which text applies to you alongside DORA.

References as of 2026-10-19. Check the current texts: they evolve, and their application depends on your situation.

Method

18 reads done out of 22. Each read is recorded with its status and its reason; a value that was not read stays empty, never 0.

IdViewStatusReasonRowsWindowLatency
B06`region-eu`.INFORMATION_SCHEMA.TABLE_STORAGEnot readabsent or not exposed; limits: none: tables.get read insteadnot read
B15API connections.listnot readmissing privilege; limits: external connections (F01)not read
B18`region-eu`.INFORMATION_SCHEMA.RESERVATIONSnot readprivilege level not requested; limits: reserved capacitynot read
B22`region-eu`.INFORMATION_SCHEMA.JOBS_BY_ORGANIZATIONnot readprivilege level not requested; limits: queries run from other projectsnot read
B01API datasets.listread10
B02API datasets.getread10
B03`region-eu`.INFORMATION_SCHEMA.TABLESread10
B04`region-europe-west1`.INFORMATION_SCHEMA.TABLESread10
B05`region-us`.INFORMATION_SCHEMA.TABLESread10
B07API tables.getread10
B08`region-eu`.INFORMATION_SCHEMA.TABLE_OPTIONSread10
B09`region-eu`.INFORMATION_SCHEMA.COLUMN_FIELD_PATHSread10
B10`region-eu`.INFORMATION_SCHEMA.JOBSread10from 2026-04-20 to 2026-10-170.1 h
B11`region-europe-west1`.INFORMATION_SCHEMA.JOBSread10from 2026-04-20 to 2026-10-170.1 h
B12`region-us`.INFORMATION_SCHEMA.JOBSread10from 2026-04-20 to 2026-10-170.1 h
B13API transferConfigs.listread10
B14API rowAccessPolicies.listread10
B16`region-eu`.INFORMATION_SCHEMA.SCHEMATA_LINKSread10
B17`region-eu`.INFORMATION_SCHEMA.SHARED_DATASET_USAGEread10
B19`region-eu`.INFORMATION_SCHEMA.ROUTINESread10

… and 2 more in reads.csv.

Privileges used

Level 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 (optional), reservations.list, reservationAssignments.list, capacityCommitments.list, organization-level permissions. Never requested: tables.getData, bigquery.user and jobUser roles.

Cost of the scan

ItemValueNature and basis
Queries sent20 queries
  • one read = one query
computed · B01, B02, B03, B04, B05, B06 …
reads attempted, read or refused by the platform
Read timeNot read: duration not provided by collection.not read

Safeguards

  • Every SQL statement sent goes through a read-only guard: only SELECT, SHOW, DESCRIBE and ALTER SESSION SET statements go out. No write, no API activation, no parameter change.
  • Query users and roles pseudonymized with HMAC, using a salt drawn for this scan and never written; tag values hashed; locations reduced to the bucket.
  • Raw SQL text is never written: only normalized forms, with literals masked, leave collection.

Rules

  • Movement: recreated: DDL less than 7 days old with no later write; live: write less than 30 days old; frozen: older last write; not determined: writes not read.
  • Storage with no read: actual window of the view read, compared with 180 days; the blind spots of each view are listed in the finding.
  • Copy time: assumed throughput of 20 to 80 MB/s.
  • List prices are dated and sourced; they do not replace your contract price.

Next steps

This report describes your platform; it recommends neither leaving nor staying.

To measure an exit on a chosen scope: canot drill copies to Apache Iceberg, compares source and copy, and signs an evidence report.

To go further, the q4o assessment, from €22,000 excl. VAT: your contract rate, actual execution, scenarios, the steps to follow. canot.io