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é.
| 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 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ément | 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 TiB facturés × prix catalogue, gratuité déduite ou non |
Réservé
| Élément | Valeur | Nature et base |
|---|---|---|
| Heures-slot | 820,5 heures-slot | 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 modèles de facturation, deux bases.
Stockage
| Élément | Valeur | Nature et base |
|---|---|---|
| Stockage facturé moyen | Non lu : non fourni par la collecte. | non lu |
| Stockage en dollars | Non 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 ….
| Table | Type | Volume | Mouvement | Preuve |
|---|---|---|---|---|
| lab-a.archive.archive_2023 | TABLE | 3 Go | figée | dernière écriture le 2025-03-01 |
| lab-a.raw.orders | TABLE | 900 Mo | vivante | dernière écriture le 2026-10-15 |
| lab-a.raw.read_by_api_only | TABLE | 700 Mo | figée | dernière écriture le 2026-09-01 |
| lab-a.raw.customers | TABLE | 200 Mo | vivante | dernière écriture le 2026-10-15 |
| lab-a.raw.events_20261001 | TABLE | 120 Mo | vivante | dernière écriture le 2026-10-15 |
| lab-a._tmp.scratch | TABLE | 50 Mo | vivante | dernière écriture le 2026-10-15 |
| lab-a.raw.orders_snap | SNAPSHOT | 10 Mo | vivante | dernière écriture le 2026-10-15 |
| lab-a.ext.gcs_events | EXTERNE | non lu | vivante | dernière écriture le 2026-10-15 |
| lab-a.ext.sheet_targets | EXTERNE | non lu | vivante | dernière écriture le 2026-10-15 |
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 d'accès aux 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 de 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é
| Élément | 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 | traduite et acceptée 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 à la plateforme) | 1 | 900 | 2 To |
| C6 | variable | 0 | 0 | 0 o |
| C7 | DDL, COPY, MERGE, requêtes de métadonnées : comptées à part | 1 | 2 | 50 ko |
| Élément | Valeur | Nature et base |
|---|---|---|
| Taux C0, par familles | 33,3 % | calculé · B10, B11, B12 traduite et acceptée par DuckDB (C0) / C0 à C6 ; C7 compté à part |
| Taux C0, par exécutions | 1,1 % | calculé · B10, B11, B12 traduite et acceptée par DuckDB (C0) / C0 à C6 ; C7 compté à part |
| Taux C0, pondéré | 0,0 %
| 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
| 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 cadrage : chaque fourchette porte ses hypothèses. Un canot drill remplace le débit supposé par une mesure.
| Élément | 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é |
| 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, à 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
| 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 (écriture déclarée 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 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_only | 700 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
| 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 (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
| 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 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.customers | Politiques : 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
| Cible | Observé |
|---|---|
| objet lab-a.sq_daily_kpi | Requête planifiée, planification every 24 hours, état active ; 180 exécutions, 3 échecs, dernière le 2026-10-17. |
| objet lab-a.sq_export | Requête planifiée, planification every day 05:00, état active ; 180 exécutions, 0 échec. |
| objet lab-a.sq_old | Requête planifiée, planification every 1 hours, état disabled ; 0 exécution, 0 échec. |
| objet lab-a.sq_weekly | Requête planifiée, planification every monday 06:00, état active ; 26 exécutions, 0 échec. |
F12 · Lecture incomplèteÀ examiner
3 constats
| Cible | Observé |
|---|---|
| lecture B15 | API 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.
| Cadre | Ce qu'il demande, en bref | Ce que ce rapport vous apporte | Ce 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.
| Id | Vue | Statut | Motif | Lignes | Fenêtre | Latence |
|---|---|---|---|---|---|---|
| B06 | `region-eu`.INFORMATION_SCHEMA.TABLE_STORAGE | non lu | absent ou non exposé ; limite : aucune : tables.get lu à 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 2026-04-20 au 2026-10-17 | 0,1 h | |
| B11 | `region-europe-west1`.INFORMATION_SCHEMA.JOBS | lu | 10 | du 2026-04-20 au 2026-10-17 | 0,1 h | |
| B12 | `region-us`.INFORMATION_SCHEMA.JOBS | lu | 10 | du 2026-04-20 au 2026-10-17 | 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 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ément | Valeur | Nature et base |
|---|---|---|
| Requêtes envoyées | 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 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