Compute
Run Compute from a Snowflake stage
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.
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:
"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.
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:
- Download the accepted parts and load them into a new table you own.
- Compare your loaded count against the manifest count, and check the failure and abstention counts too.
- 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.