> ## Documentation Index
>
> Fetch the complete documentation index at: https://lithi.ai/llms.txt
>
> Use this file to discover all available pages before exploring further.

---
title: Run Compute from a Snowflake stage
description: >-
  Point Compute at an immutable stage or manifest, keep database credentials
  outside every work request, and treat loading and reconciling as two explicit
  steps you run.
route: /docs/compute/integrations/snowflake-warehouses
page_id: docs-compute-integrations-snowflake-warehouses
page_type: howTo
content_layer: guided documentation
surface_profile: guided_docs
audience: Warehouse engineers exchanging staged files with a Compute workflow
voice: D
reader_question: How do I hand warehouse data to Compute without handing over database access?
primary_action: Publish an immutable stage and request a quote
source_locale: en-US
source_status: APPROVED
source_version: docs-compute-integrations-snowflake-warehouses-en-us-2026-09-05-v1
last_updated: '2026-09-05'
robots: index
claim_registry_pinned: true
claim_registry_resync: "npm run governed:tsx -- scripts/build-compute-public-claim-registry.ts --write"
---

## What this connects

Files you unload to an external stage, in one direction. Lithi reads the staged files you froze and writes an accepted result bundle you load back yourself.

The conformance level is `import_compatible`: released open file formats, backed by a published conformance matrix. There is no warehouse driver, no query pushdown and no native warehouse claim of any kind.

## Bind an exact input

Unload the query result you want, then stop writing to that stage location. A stage that another process can still write to is not a frozen input.

Bind the manifest or the file set rather than a folder prefix:

```json
"input": {
  "adapter": "<your registered storage adapter>",
  "location": "<the manifest or exact file set you unloaded>",
  "credential_ref": "<a registered credential reference>",
  "snapshot": {
    "version_id": "<the unload or query identity you recorded>",
    "content_sha256": "<the digest of those exact bytes>"
  },
  "format": "<a released format profile>",
  "item_id_field": "<the column that identifies a row>"
}
```

Keep the query text or the reference that produced the unload in your own records. That is what lets you re-create the same input if a later run has to be repeated. See [how to pin a snapshot that cannot change](/docs/compute/inputs/immutable-snapshots).

## Credentials

Only the storage credential is ever registered, and only as a reference. `credential_ref` resolves to a credential you plan, register, test, read back and revoke on your own schedule.

Database credentials stay outside every work request. No warehouse user, password, key pair or session token belongs in `input`, in a support note, or in an example you paste anywhere. Credentials are stripped before job and receipt persistence, but the safest credential is the one that was never sent.

## Formats and limits

The released profile named in `input.format` decides how values are read. Unload settings that look harmless, such as a local timestamp with no offset or a sentinel for null, change the meaning of a column.

The maximum item count for a workflow is stated on its descriptor and repeated on your quote, alongside the maximum charge. Set your own `deadline` and `maximum_price` in `limits`.

## Commit the output

Accepted rows are written to `data/part-*`, with typed failures, abstentions and preserved disagreements written to their own directories beside them.

`result-manifest.json` is written last and is the only complete-bundle marker. Loading is your step, and reconciling is a second step:

1. Download the accepted parts and load them into a new table you own.
2. Compare your loaded count against the manifest count, and check the failure and abstention counts too.
3. Only then let a downstream reader see the table.

## What is not supported

Lithi holds no wire, SDK or endpoint compatibility with any warehouse service, and never describes itself as native to one.

Outside the adapter:

- Running SQL, tasks or stored procedures in your account.
- Reading a table directly, or through a driver, connector or share.
- Writing into a schema on your behalf without a registered destination.
- Any credential that would grant more than reading the stage you named.

If admission answers `REPLAN_REQUIRED`, the staged bytes or the format profile moved after you quoted. Re-read the stage, rebuild the request with the current digest, quote again, then approve again.
