canot.io

Rapport de preuve : exercice de sortie

Source : duckdb:demo.duckdb · Destination : local:iceberg · Constat daté du 19 oct. 2026, 21:46, sur le périmètre exécuté · Canot 0.6.5

Synthèse

Sortie réalisable sur ce périmètre. 2 points à traiter avant de partir.

Concordant
Les comptes et statistiques concordent, à la précision près.Les 8 tables, 866 602 lignes au total, ont été copiées puis comparées (niveau de preuve : agrégats complets). Le nombre de lignes et les statistiques par colonne recalculés dans le moteur source concordent avec la copie, et la copie concorde avec les lignes telles que Canot les a lues (empreinte de contenu). Le contenu n'est pas comparé valeur par valeur avec la source : voir Niveau de preuve. Seules les colonnes signalées ci-dessous diffèrent.
3 sur 4
Vos rapports donnent presque les mêmes chiffres.4 requêtes de reporting ont été rejouées des deux côtés. 3 renvoient exactement le même résultat.
À traiter
Un rapport renvoie un résultat différent.select * from tpch.lineitem order by l_orderkey, l_linenumber limit 50… : ligne triée 0, colonne 16 : '1996-02-12T00:00:00.000001001' / datetime.datetime(1996, 2, 12, 0, 0, 0, 1). Les chiffres sont peut-être justes et seule la présentation diffère : mieux vaut le savoir avant de partir.
À traiter
1 colonne(s) perdent en précision à l'arrivée.tpch.lineitem.l_loaded_at : TIMESTAMP_NS devient timestamp[us]. Les valeurs diffèrent au-delà de la précision du type cible. Ce n'est pas une corruption : c'est un choix de type à faire avant de partir.
Signé
Toute modification du journal se voit.Chaque étape est consignée dans un journal signé avec une clé créée de votre côté. La signature atteste l'intégrité du journal, ni l'identité de son auteur ni la date : l'empreinte de la clé figure en bas du rapport.

La relecture est facultative et sans engagement : vous envoyez un résumé (drill-share.json : des comptages seulement, sans noms de tables, sans SQL, sans identités) et l'équipe derrière Canot vous dit ce que signifient les constats. Rien n'est envoyé depuis cette page.

Constat : écarts à examiner — 7/8 tables concordantes (niveau de preuve : agrégats complets), 3/4 requêtes au même résultat, 0 non rejouable(s), 1 avec un écart, 1 conversion(s) avec perte possible.

Mesures de cet exercice

Ces mesures décrivent cet exercice, sur ce périmètre. Elles ne comparent pas deux plateformes.

Où se trouve la copie

Destination : local:iceberg · emplacement : …/iceberg/warehouse · catalogue : SQLite (catalog.db dans le dossier de sortie).
La copie est au format Apache Iceberg : vous pouvez la relire sans Canot. Le fichier reread.sql, à côté de ce rapport, contient les commandes DuckDB pour le faire.

Tables

TableLignes sourceLignes cibleRésultatNiveau de preuveDétails
tpch.customer15 00015 000concordanteAgrégats complets
tpch.lineitem600 572600 572précisionAgrégats completsl_loaded_at.min: '1992-01-31T00:00:00.287971001' / datetime.datetime(1992, 1, 31, 0, 0, 0, 287971) ; l_loaded_at.max: '1998-10-31T00:00:00.455367004' / datetime.datetime(1998, 10, 31, 0, 0, 0, 455367) ; comparée seulement à la précision du type cible : l_loaded_at
tpch.nation2525concordanteAgrégats complets
tpch.orders150 000150 000concordanteAgrégats complets
tpch.part20 00020 000concordanteAgrégats complets
tpch.partsupp80 00080 000concordanteAgrégats complets
tpch.region55concordanteAgrégats complets
tpch.supplier1 0001 000concordanteAgrégats complets

Niveau de preuve

Niveau atteint par cet exercice : Agrégats complets (full_aggregates), le plus bas de ses tables (8 table(s) : Agrégats complets).

Ce que les agrégats complets ne prouvent pas : une valeur modifiée à l'intérieur d'une colonne de texte qui garde le même nombre de valeurs, le même minimum et le même maximum ne serait pas détectée par le recalcul dans le moteur source, et l'empreinte de contenu montre seulement que la copie correspond à ce que Canot a lu, pas que Canot a lu fidèlement la source. Un contrôle plus fort, une empreinte de contenu calculée dans les deux moteurs, n'est pas encore disponible.

Requêtes rejouées des deux côtés

RequêteRésultatDétails
select l_returnflag, l_linestatus, sum(l_quantity) as sum_qty, sum(l_extendedprice) as sum_base_price, sum(l_extendedprice * (1 - l_dmême résultat
select l_orderkey, sum(l_extendedprice * (1 - l_discount)) as revenue, o_orderdate from tpch.customer, tpch.orders, tpch.lineitem where c_mkmême résultat
select sum(l_extendedprice * l_discount) as revenue from tpch.lineitem where l_shipdate >= date '1994-01-01' and l_shipdate < date '1995-01-même résultat
select * from tpch.lineitem order by l_orderkey, l_linenumber limit 50écartligne triée 0, colonne 16 : '1996-02-12T00:00:00.000001001' / datetime.datetime(1996, 2, 12, 0, 0, 0, 1)

Conversions de type

tpch.lineitem.l_loaded_atTIMESTAMP_NS → timestamp[us]ns -> us (Iceberg v2 ne conserve pas les nanosecondes) (perte possible)

Ce qui ne se déplace pas tel quel

Colonnes d'un type propre à la plateforme : 0. Objets à reconstruire (vues, procédures, tâches…) :

TypeNombreExemples
aucun détecté

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 : les plans de sortie des services TIC qui soutiennent les fonctions visées par DORA sont documentés et testés.L'exercice de sortie lui-même : sa date, son périmètre, ce qui a été copié et comparé, ce qui diffère, dans un journal signé.Un exercice sur un périmètre. DORA attend aussi un réexamen périodique et des scénarios que vous définissez vous-même.
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. 23 à 31 (changement de service de traitement de données) ; art. 30 : export dans un format structuré, couramment utilisé et lisible par machine.Une copie au format Apache Iceberg, un format ouvert, relisible sans Canot (le fichier reread.sql à côté du rapport).Le respect par votre prestataire de ses propres obligations relève de votre contrat.
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)Art. 5, § 2 : responsabilité ; art. 28, § 3, point g) : restitution ou suppression des données personnelles à la fin du service.Un relevé signé de ce qui a été copié, quand et vers où. Toute modification du journal se voit.Ne couvre pas la suppression à la source. La signature atteste l'intégrité, pas l'auteur ni la date.
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.
SecNumCloud (ANSSI)La qualification porte sur l'offre du prestataire, et son référentiel comprend des exigences de réversibilité.L'endroit où arrive la copie (prestataire, région), pour vérifier cette offre dans la liste ANSSI des offres qualifiées, et une copie au format ouvert.Canot n'évalue ni ne certifie aucune offre. La qualification dépend de l'offre précise et relève de l'ANSSI.
NIS2 (directive (UE) 2022/2555)Art. 21, § 2, point c) : continuité des activités, y compris la gestion des sauvegardes et la reprise.Des éléments montrant que les données peuvent être restaurées ailleurs dans un format ouvert : une copie comparée à la source, et une fourchette de temps de reprise.Ni un plan de sauvegarde ni un plan de reprise après sinistre. Un exercice sur un périmètre.
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.

Ce que ces chiffres ne disent pas

Tolérances appliquées

{"float_rel": 1e-09, "decimal_abs": 0.0, "columns": {}}

Intégrité du rapport

Journal chaîné : 23 entrées, dernier hachage cc315d801991f7700dd48a292401292bc4ca3ca0a861d08914c97b35c9287b55. Toute modification du journal se voit. Vérification : canot verify-evidence evidence

Empreinte de la clé publique de signature : 47371597 1591e860 04c9cf93 0acc0d7d. La signature atteste l'intégrité du journal. Elle n'établit ni l'identité de l'auteur ni la date : pour cela, conservez le rapport dans votre propre archive horodatée.

Ce rapport consigne des mesures pour votre propre évaluation. Ce n'est pas une certification, et il ne dit pas si vos contrats ou votre organisation satisfont à une réglementation.

Ce rapport couvre le périmètre que vous avez choisi. Pour l'obtenir sur votre environnement, avec trois scénarios de coût de sortie et les étapes à suivre : canot.io.

Evidence report: exit exercise

Source: duckdb:demo.duckdb · Target: local:iceberg · Finding dated 2026-10-19 21:46, on the scope run · Canot 0.6.5

Summary

Exit feasible on this scope. 2 points to address before leaving.

Matches
Counts and statistics match, except for precision.All 8 tables, 866,602 rows in total, were copied then compared (proof level: full aggregates). Row counts and per-column statistics recomputed in the source engine match the copy, and the copy matches the rows as Canot read them (content fingerprint). The content is not compared value by value with the source: see Proof level. Only the columns flagged below differ.
3 of 4
Your reports give almost the same figures.4 reporting queries were replayed on both sides. 3 return exactly the same result.
To address
A report returns a different result.select * from tpch.lineitem order by l_orderkey, l_linenumber limit 50…: sorted row 0, column 16: '1996-02-12T00:00:00.000001001' / datetime.datetime(1996, 2, 12, 0, 0, 0, 1). The figures may be right and only the presentation differs: better to know before leaving.
To address
1 column(s) lose precision on arrival.tpch.lineitem.l_loaded_at: TIMESTAMP_NS becomes timestamp[us]. The values differ beyond the precision of the target type. This is not corruption: it is a type choice to make before leaving.
Signed
Any change to the log shows.Each step is recorded in a log signed with a key created on your side. The signature attests the integrity of the log, not the identity of its author nor the date: the key fingerprint is shown at the bottom of the report.

The review is optional and free of obligation: you send a summary (drill-share.json: counts only, no table names, no SQL, no identities) and the team behind Canot tells you what the findings mean. Nothing is sent from this page.

Finding: mismatches to review — 7/8 matching tables (proof level: full aggregates), 3/4 queries with the same result, 0 not replayable, 1 with a mismatch, 1 conversion(s) with possible loss.

Measurements from this exercise

These measurements describe this exercise, on this scope. They do not compare two platforms.

Where the copy is

Destination: local:iceberg · location: …/iceberg/warehouse · catalog: SQLite (catalog.db in the output folder).
The copy is in Apache Iceberg format: you can reread it without Canot. The reread.sql file next to this report holds the DuckDB commands to do so.

Tables

TableSource rowsTarget rowsResultProof levelDetails
tpch.customer1500015000matchesFull aggregates
tpch.lineitem600572600572precisionFull aggregatesl_loaded_at.min: '1992-01-31T00:00:00.287971001' / datetime.datetime(1992, 1, 31, 0, 0, 0, 287971); l_loaded_at.max: '1998-10-31T00:00:00.455367004' / datetime.datetime(1998, 10, 31, 0, 0, 0, 455367); compared only within the precision of the target type: l_loaded_at
tpch.nation2525matchesFull aggregates
tpch.orders150000150000matchesFull aggregates
tpch.part2000020000matchesFull aggregates
tpch.partsupp8000080000matchesFull aggregates
tpch.region55matchesFull aggregates
tpch.supplier10001000matchesFull aggregates

Proof level

Level reached by this exercise: Full aggregates (full_aggregates), the lowest level over its tables (8 table(s): Full aggregates).

What full aggregates do not prove: a value changed inside a text column that keeps the same count, minimum and maximum would not be detected by the recomputation in the source engine, and the content fingerprint only shows that the copy matches what Canot read, not that Canot read the source faithfully. A stronger check, a content fingerprint computed in both engines, is not implemented yet.

Queries replayed on both sides

QueryResultDetails
select l_returnflag, l_linestatus, sum(l_quantity) as sum_qty, sum(l_extendedprice) as sum_base_price, sum(l_extendedprice * (1 - l_dmatch
select l_orderkey, sum(l_extendedprice * (1 - l_discount)) as revenue, o_orderdate from tpch.customer, tpch.orders, tpch.lineitem where c_mkmatch
select sum(l_extendedprice * l_discount) as revenue from tpch.lineitem where l_shipdate >= date '1994-01-01' and l_shipdate < date '1995-01-match
select * from tpch.lineitem order by l_orderkey, l_linenumber limit 50mismatchsorted row 0, column 16: '1996-02-12T00:00:00.000001001' / datetime.datetime(1996, 2, 12, 0, 0, 0, 1)

Type conversions

tpch.lineitem.l_loaded_atTIMESTAMP_NS → timestamp[us]ns -> us (Iceberg v2 does not keep nanoseconds) (possible loss)

What does not move as is

Columns with a platform-specific type: 0. Objects to rebuild (views, procedures, tasks…):

TypeCountExamples
none detected

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): exit plans for ICT services supporting the functions DORA targets are documented and tested.The exit exercise itself: its date, its scope, what was copied and compared, what differs, in a signed log.One exercise on one scope. DORA also expects periodic review and scenarios you define yourself.
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)Arts. 23 to 31 (switching between data processing services); Art. 30: export in a structured, commonly used, machine-readable format.A copy in Apache Iceberg, an open format, that can be reread without Canot (the reread.sql file next to the report).Whether your provider meets its own obligations is a matter for your contract.
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)Art. 5(2) accountability; Art. 28(3)(g): return or deletion of personal data at the end of the service.A signed record of what was copied, when and to where. Any change to the log shows.Does not cover deletion at the source. The signature attests integrity, not the author or the date.
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.
SecNumCloud (ANSSI)The qualification concerns the provider's offer, and its referential includes reversibility requirements.Where the copy lands (provider, region) so you can check that offer against the ANSSI list of qualified offers, and an open-format copy.Canot does not assess or certify an offer. Qualification depends on the precise offer and is decided by ANSSI.
NIS2 (Directive (EU) 2022/2555)Art. 21(2)(c): business continuity, including backup management and recovery.Evidence that the data can be restored in an open format elsewhere: a copy compared with the source, and a recovery time range.Not a backup or disaster-recovery plan. One exercise on one scope.
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.

What these figures do not say

Tolerances applied

{"float_rel": 1e-09, "decimal_abs": 0.0, "columns": {}}

Report integrity

Chained log: 23 entries, last hash cc315d801991f7700dd48a292401292bc4ca3ca0a861d08914c97b35c9287b55. Any change to the log shows. Verification: canot verify-evidence evidence

Fingerprint of the public signing key: 47371597 1591e860 04c9cf93 0acc0d7d. The signature attests the integrity of the log. It establishes neither the identity of the author nor the date: for that, keep the report in your own timestamped archive.

This report is a record of measurements for your own assessment. It is not a certification and it does not say whether your contracts or your organization meet any regulation.

This report covers the scope you chose. To get it on your environment, with three exit-cost scenarios and the steps to follow: canot.io.