#8399·sqlglot

Snowflake: PUT with an unquoted source falls back to exp.Command

Author: tekumaraCreated Sep 19, 2026Updated Sep 19, 2026

PUT with an unquoted source is valid Snowflake syntax, but SQLGlot parses it as exp.Command rather than exp.Put. Quoting the same source produces exp.Put.

Reproduced with SQLGlot 30.17.0 and current main at a470787be21812ba235963c41f23107e3502c00b.

Minimal reproduction

python
from sqlglot import parse_one

unquoted = parse_one("PUT file:///tmp/data.csv @stage", read="snowflake")
quoted = parse_one("PUT 'file:///tmp/data.csv' @stage", read="snowflake")

print(type(unquoted).__name__)
print(type(quoted).__name__)

Actual output:

Command
Put

The unquoted statement also emits this warning:

'PUT file:///tmp/data.csv @stage' contains unsupported syntax. Falling back to parsing as a 'Command'.

Expected: both statements should parse as exp.Put, with the same source and target.

No Snowflake connection or local file is needed to reproduce the parsing issue.

Official documentation

The Snowflake PUT documentation includes this valid unquoted example:

sql
PUT file:///tmp/data/mydata.csv @my_int_stage;

The source parameter documentation calls for single quotes when the directory path or filename contains special characters or spaces. They are not required for a simple source URI such as the one above.

Related: #4813 (closed PUT/GET parsing support issue).