Scope
- Platform: Snowflake
- Scope: account ab98765, database PROD
- Privilege level: 1 (inventory, volumes, consumption)
- SQL mode: read-only
- Reads: 5 done out of 19
- Content read: 3 tables, 3 objects, 0 query families
- Versions: canot 0.1.0, duckdb 1.5.6, sqlglot 30.22.0
Capabilities
This report is an inventory: inventoried, neither exported nor replayed.
| Level | This report | Canot on Snowflake |
|---|---|---|
| Inventory | done by this scan (level 1) | full, levels 1 to 3 |
| Export | not done by this scan | iceberg, with canot drill |
| Evidence | not done by this scan | P1 data parity; P2 query replay, with canot drill |
Snowflake connector: tested; recorded test: canot drill, 2026-10-17: Snowflake trial account, TPC-H SF10 (docs/banc-essai.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: 365 days. Credits measured; in dollars, only with the price provided or a dated list-price range.
| Item | Value | Nature and basis |
|---|---|---|
| Credits consumed | Not read: METERING_DAILY_HISTORY not read: missing privilege. | not read |
| In dollars | Not estimated: credits not read. | not estimated |
Storage
| Item | Value | Nature and basis |
|---|---|---|
| Average billed storage | Not read: STORAGE_USAGE not read: missing privilege. | not read |
| Storage in dollars | Not estimated: your contract price not read. | not estimated |
Movements
0 frozen, 0 live, 1 recreated, 2 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: S01.
| Table | Type | Volume | Movement | Evidence |
|---|---|---|---|---|
| PROD.MART.KPI | TABLE | not read | recreated | last DDL on 2026-10-16, writes not read |
| PROD.RAW.ARCHIVE_2019 | TABLE | not read | not determined | writes not read |
| PROD.RAW.ORDERS | TABLE | not read | not determined | writes not read |
What does not leave with the copy
Objects to rebuild or describe
| Type | Count | Examples |
|---|---|---|
| procedure | 1 | PROD.MART.SP_HIDDEN |
| task | 1 | PROD.OPS.T_NIGHTLY |
| view | 1 | PROD.MART.V_REVENUE |
Routines per language: NOT READ 1.
Columns with a platform-specific type (1)
| Table | Column | Type |
|---|---|---|
| PROD.RAW.ORDERS | doc | VARIANT |
Billed history
| Item | Value | Nature and basis |
|---|---|---|
| Time Travel and Fail-safe (0 tables) | Not read: TABLE_STORAGE_METRICS not read: missing privilege. | not read |
Dependencies
No external dependency observed in the reads done.
Query replayability
Not read: QUERY_HISTORY not read: privilege level not requested.
Ranges
Planning estimates: each range carries its assumptions. A canot drill replaces the assumed throughput with a measurement.
| Item | Value | Nature and basis |
|---|---|---|
| Volume to copy | Not read: TABLE_STORAGE_METRICS not read: missing privilege. | not read |
| Copy read time | Not estimated: volume not read. | not estimated |
| Copy read credits | Not estimated: volume not read. | not estimated |
| Copy read cost | Not estimated: credits not read. | not estimated |
| Rework | 0.8 d to 5.0 d
| estimated, low confidence · S02, S09, S10, S11 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.
F11 · Scheduled chain and its failuresTo review
1 finding
| Target | Observed |
|---|---|
| object PROD.OPS.T_NIGHTLY | Task, schedule USING CRON 0 1 * * * UTC, state started; runs not read. |
F12 · Incomplete readTo review
15 findings
| Target | Observed |
|---|---|
| read S03 | TABLE_STORAGE_METRICS not read (missing privilege); limits: active bytes and history (F05, F06, F07, ranges). |
| read S04 | STORAGE_USAGE not read (missing privilege); limits: average billed storage. |
| read S05 | METERING_DAILY_HISTORY not read (missing privilege); limits: credits per service. |
| read S06 | WAREHOUSE_METERING_HISTORY not read (missing privilege); limits: credits per warehouse. |
| read S07 | TABLE_DML_HISTORY not read (missing privilege); limits: latest writes (movement). |
| read S08 | TABLE_QUERY_PRUNING_HISTORY not read (missing privilege); limits: fallback for reads per table (F05). |
| read S12 | TASK_HISTORY not read (timed out); limits: task runs and failures (F11). |
| read S13 | QUERY_HISTORY not read (privilege level not requested); limits: query families, replayability, observed writes (F03). |
| read S14 | ACCESS_HISTORY not read (privilege level not requested); limits: reads per object: F05 not computed; edition not determined (Standard or missing privilege). |
| read S15 | POLICY_REFERENCES not read (privilege level not requested); limits: applied policies (F10). |
| read S16 | TAG_REFERENCES not read (privilege level not requested); limits: tags (F10). |
| read S17 | GRANTS_TO_ROLES not read (privilege level not requested); limits: owner roles with no holder (F04). |
| read S18 | GRANTS_TO_USERS not read (privilege level not requested); limits: owner roles with no holder (F04). |
| read S19 | SHARES not read (privilege level not requested); limits: external consumers (F09). |
| read code_des_routines | Code not read for 1 routine (filtered by privileges or not provided); limits: dynamic SQL (F08). |
No finding for: F01, F02, F03, F04, F05, F06, F07, F08, F09, F10. An absence of findings only holds for the reads done (see F12 and the method).
What this report does not quantify
- Average billed storage: STORAGE_USAGE not read: missing privilege.
- Storage cost: your contract price not read.
- Credits consumed: METERING_DAILY_HISTORY not read: missing privilege.
- Credits in dollars: credits not read.
- Volume to copy: TABLE_STORAGE_METRICS not read: missing privilege.
- Copy read time: volume not read.
- Copy read credits: volume not read.
- Copy read cost: credits not read.
- Query replayability: QUERY_HISTORY not read: privilege level not requested.
- Billed history: TABLE_STORAGE_METRICS not read: missing privilege.
- 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.
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.
| Framework | What it asks, in short | What this report gives you | What 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
5 reads done out of 19. Each read is recorded with its status and its reason; a value that was not read stays empty, never 0.
| Id | View | Status | Reason | Rows | Window | Latency |
|---|---|---|---|---|---|---|
| S03 | TABLE_STORAGE_METRICS | not read | missing privilege; limits: active bytes and history (F05, F06, F07, ranges) | not read | ||
| S04 | STORAGE_USAGE | not read | missing privilege; limits: average billed storage | not read | ||
| S05 | METERING_DAILY_HISTORY | not read | missing privilege; limits: credits per service | not read | ||
| S06 | WAREHOUSE_METERING_HISTORY | not read | missing privilege; limits: credits per warehouse | not read | ||
| S07 | TABLE_DML_HISTORY | not read | missing privilege; limits: latest writes (movement) | not read | ||
| S08 | TABLE_QUERY_PRUNING_HISTORY | not read | missing privilege; limits: fallback for reads per table (F05) | not read | ||
| S12 | TASK_HISTORY | not read | timed out; limits: task runs and failures (F11) | not read | ||
| S13 | QUERY_HISTORY | not read | privilege level not requested; limits: query families, replayability, observed writes (F03) | not read | ||
| S14 | ACCESS_HISTORY | not read | privilege level not requested; limits: reads per object: F05 not computed; edition not determined (Standard or missing privilege) | not read | ||
| S15 | POLICY_REFERENCES | not read | privilege level not requested; limits: applied policies (F10) | not read | ||
| S16 | TAG_REFERENCES | not read | privilege level not requested; limits: tags (F10) | not read | ||
| S17 | GRANTS_TO_ROLES | not read | privilege level not requested; limits: owner roles with no holder (F04) | not read | ||
| S18 | GRANTS_TO_USERS | not read | privilege level not requested; limits: owner roles with no holder (F04) | not read | ||
| S19 | SHARES | not read | privilege level not requested; limits: external consumers (F09) | not read | ||
| S01 | TABLES | read | 10 | 1.5 h | ||
| S02 | COLUMNS | read | 10 | |||
| S09 | VIEWS | read | 10 | |||
| S10 | PROCEDURES | read | 10 | |||
| S11 | TASKS | read | 10 |
Privileges used
Level 1: SNOWFLAKE.OBJECT_VIEWER, SNOWFLAKE.USAGE_VIEWER. Never requested: IMPORTED PRIVILEGES, MANAGE GRANTS, IMPORT SHARE, USAGE on functions, READ on stages.
Cost of the scan
| Item | Value | Nature and basis |
|---|---|---|
| Queries sent | 12 queries
| computed · S01, S02, S03, S04, S05, S06 … reads attempted, read or refused by the platform |
| Read time | Not 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 365 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