Agentsql

Snowflake natural language query: how business users ask Snowflake questions in plain English

Marcus Feld, Analytics·Jul 12, 2026·8 min read

A Snowflake natural language query is a plain-English question ("how many enterprise accounts churned last quarter?") that a text-to-SQL layer translates into a real Snowflake SQL statement, runs against your warehouse over a read-only connection, and returns as a chart, a table, and a one-line answer. Snowflake itself does not read English out of the box in a classic worksheet; you either use its own AI features or point an AI analyst tool at it. The tool does the translation, Snowflake does the compute, and every question spends warehouse credits like any other query. The version worth deploying always shows you the SQL it generated so an analyst can check it before anyone acts on the number.

What actually happens between the question and the answer

The mechanics are less magical than the demos suggest, and understanding them is what separates a rollout that sticks from one that gets quietly abandoned in month two.

  1. Schema introspection. The tool reads your metadata: databases, schemas, tables, columns, data types, and (if they exist) primary and foreign key definitions. It does not need to read your rows to do this.
  2. Grounding. The question plus the relevant slice of schema plus any metric definitions you have written get assembled into a prompt. This is the step where quality is won or lost.
  3. Generation. A model writes Snowflake-dialect SQL. Good implementations constrain it to SELECT and CTEs, and inject a LIMIT on exploratory queries.
  4. Execution. The SQL runs on a Snowflake virtual warehouse under a specific role. That role should be able to read and nothing else.
  5. Presentation. Rows come back, a chart gets picked, and the SQL is displayed next to the result so a human can audit it.

Step 5 is not a nicety. If the SQL is hidden, you have replaced a data ticket with a black box, and your analysts will refuse to defend numbers they cannot see the derivation of. That is why text-to-SQL that prints its work is the only version that survives contact with a real finance team.

Set up a least-privilege read-only role for the tool

Do not connect an AI analyst with ACCOUNTADMIN. Do not connect it with a human's personal user, either. Create a dedicated service user and a dedicated role, and grant that role the minimum it needs. In Snowflake's privilege model, access is additive and role-based, so the steps are straightforward:

  • Create a role for the tool, something obvious like AI_ANALYST_RO.
  • Grant USAGE on a warehouse. Without USAGE on a virtual warehouse, the role cannot execute anything, because Snowflake needs compute to run the query. Point it at a small warehouse you control, not the one your ELT jobs use.
  • Grant USAGE on the database and on each schema the tool should see. USAGE on a schema is what makes the objects inside it addressable; it is not itself permission to read data.
  • Grant SELECT on the tables and views inside those schemas. Grant on the specific objects, or on ALL and FUTURE tables in a schema if you want new tables to be visible automatically. Choose deliberately: FUTURE grants are convenient and they also mean tomorrow's table lands in scope without a review.
  • Create a user for the tool and set that role as its default. Use key-pair authentication if your security team prefers it over passwords.
  • Grant nothing else. No INSERT, no UPDATE, no DELETE, no CREATE, no OWNERSHIP. If the role cannot write, no generated statement can write, no matter what someone types into the question box.

This is the whole security argument, and it is a structural one rather than a promise. A connection that is read-only by design at the Snowflake grant level cannot mutate your data even if the model produces something ill-advised. Scope the schemas too: if the tool never needs to see the HR schema, do not grant USAGE on it. Row access policies and dynamic data masking still apply to whatever role you connect with, so PII protections you already built keep working.

Credits: why cheap queries matter more here than anywhere else

Snowflake bills compute in credits, per second of warehouse runtime, above a short minimum. A dashboard runs on a schedule. A natural language interface runs whenever a curious PM has a thought. The usage pattern is bursty and unpredictable, which is exactly the pattern that surprises people on the monthly bill. Controls that work:

  • Give the tool its own warehouse and keep it small. An XS warehouse answers most business questions on well-modeled tables. Isolating it also means you can see precisely what natural language usage costs, instead of guessing at a slice of a shared warehouse.
  • Set a short auto-suspend. A warehouse that suspends after 60 seconds of idle stops burning credits between questions. Auto-resume brings it back on the next query, at the cost of a brief warm-up.
  • Let the result cache work. Snowflake serves identical queries from its result cache for 24 hours if the underlying data has not changed, and cache hits do not consume warehouse compute. Ten people asking the same question in a Monday standup should cost roughly what one person asking it costs. This is a real argument for deterministic, repeatable SQL generation.
  • No SELECT *. Snowflake is columnar. Selecting every column on a wide table scans far more micro-partitions than the three columns anybody actually asked about.
  • LIMIT exploratory queries. Nobody eyeballs 4 million rows in a browser. Cap the row count on the exploration path and let people export deliberately when they need the full set.
  • Put a resource monitor on the warehouse. Set a credit quota with an alert, and a suspend threshold if you want a hard ceiling. It takes ten minutes and it converts an unknown risk into a known one.

Four ways a business user gets an answer out of Snowflake

ApproachWho can use itTime to an answerShows the SQL?Setup effort
Write SQL by handAnalysts and engineers onlyMinutes if you know the schema, days if you are in a ticket queueYes, you wrote itNone, plus years of skill
BI dashboard built by the data teamAnyone, but only for questions already anticipatedSeconds for the planned question, a new ticket for anything elseUsually not, logic hides in the semantic layerHigh: modeling, build, maintenance
Snowflake native AI featuresAnyone with account access and the right grantsSeconds to a minuteVaries by feature and interfaceModerate: configuration and semantic setup inside Snowflake
AI data analyst connected read-only (Agentsql)Anyone who can type a questionSeconds, question to chartYes, always, on every queryLow: one read-only role, one connection

Can Snowflake understand natural language?

Not in a plain worksheet. A Snowflake worksheet expects SQL. Snowflake does ship AI capabilities in the platform, and separately you can connect an external text-to-SQL tool that translates English into Snowflake SQL and executes it over your connection. Either way, something is translating the question into SQL before Snowflake runs it.

How do I query Snowflake without SQL?

Connect a text-to-SQL tool to Snowflake using a dedicated read-only role, then type your question. The tool reads your schema, writes the SQL, runs it on your warehouse, and returns a chart plus a table. You never open a worksheet, but you can still read the SQL it generated. That is the practical path to natural language query for Snowflake for people who do not write SQL.

Is natural language to SQL accurate on Snowflake?

Accuracy depends far more on your schema than on the model. Clean table names, meaningful column names, documented join keys, and one agreed definition of "active customer" produce reliably correct SQL. Tables named TBL_CUST_2 with a column called FLG_3 produce confident nonsense. Our text-to-SQL accuracy breakdown covers where the failures cluster.

Two more things drive the number up. First, define your metrics once, in writing, so revenue means the same thing on Tuesday as it did on Monday. Second, an answer is only as good as the table under it, so teams usually monitor freshness, volume, and schema drift on the models they expose before they let anyone self-serve on them. A perfectly generated query against a pipeline that silently stopped loading two days ago is still a wrong answer.

Does querying Snowflake in plain English cost more credits?

Per query, no. The generated SQL costs whatever equivalent hand-written SQL would cost on the same warehouse. In aggregate it can cost more, simply because people ask more questions when asking is easy. Isolate the tool on a small warehouse, set a short auto-suspend, and attach a resource monitor. Then the cost is visible and bounded.

What this actually changes for the data team

The value is not that executives stop needing analysts. It is that analysts stop being a ticket queue for "what was signup volume in EMEA last week." Those questions get answered in seconds, the SQL is right there if anyone wants to check the join, and the analyst spends the afternoon on the retention model instead. Used as an AI tool for data analysts, it is a way to buy back the hours you currently lose to lookups.

Start by exposing two or three well-modeled schemas, not your whole account. Watch which questions people actually ask for a couple of weeks. The queries that come back wrong will point at exactly the naming and metric definitions you need to fix, which is useful information whether or not you keep the tool. Connect a read-only role to Snowflake, ask your first question, read the SQL it wrote, and see our pricing when you are ready to roll it out to the team.

See Agentsql write and run the SQL live.

Ask a question in plain English, watch the query appear, and get a chart and an answer with the SQL shown. Then point Agentsql at your own database.

See how it works

Ask your data in plain English.