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

# Statements

> Snowflake DDL, DML, transaction (TCL), and DCL statements supported in Snowflake compatibility mode.

<span className="feature-tag">Preview</span>

Snowflake [data definition](https://docs.snowflake.com/en/sql-reference/sql-ddl-summary) (DDL), [data manipulation](https://docs.snowflake.com/en/sql-reference/sql-dml) (DML), [transaction](https://docs.snowflake.com/en/sql-reference/transactions) (TCL), and [data control](https://docs.snowflake.com/en/sql-reference/sql/grant-privilege) (DCL) statements in [Snowflake compatibility mode](/reference-sql/snowflake/overview).

## Data definition language

| Statement | Support | Notes |
| :- | :- | :- |
| [`CREATE TABLE`](https://docs.snowflake.com/en/sql-reference/sql/create-table) | Supported | Column-definition, `AS SELECT`, and `CLONE` forms, with `IF NOT EXISTS`, `TEMPORARY`, column constraints, and `DEFAULT`. `CLUSTER BY` becomes the table's [primary index](/reference-sql/commands/data-definition/create-fact-dimension-table), including a computed clustering key. `TRANSIENT` and `COMMENT` are accepted and ignored. `IDENTITY`, `AUTOINCREMENT`, `LIKE`, `DATA_RETENTION_TIME_IN_DAYS`, and the policy and Iceberg clauses are rejected. A column list must match the query's output width. With `SELECT *` the width is not known when the statement is translated, so the list is not applied and the query's own column names are kept, where Snowflake applies the declared ones. |
| [`CREATE VIEW`](https://docs.snowflake.com/en/sql-reference/sql/create-view) | Supported | `OR REPLACE` and `IF NOT EXISTS`. `SECURE` is accepted and ignored: the view definition stays readable, where Snowflake hides it. Column-list views are not supported. |
| [`CREATE SCHEMA`](https://docs.snowflake.com/en/sql-reference/sql/create-schema) | Supported | `IF NOT EXISTS`. `TRANSIENT` is not supported. |
| [`DROP TABLE`](https://docs.snowflake.com/en/sql-reference/sql/drop-table), [`DROP VIEW`](https://docs.snowflake.com/en/sql-reference/sql/drop-view), [`DROP SCHEMA`](https://docs.snowflake.com/en/sql-reference/sql/drop-schema) | Supported | `IF EXISTS`. |
| [`ALTER TABLE`](https://docs.snowflake.com/en/sql-reference/sql/alter-table) | With limitations | `ADD COLUMN`, `DROP COLUMN`, `RENAME COLUMN`, and `RENAME TO`. Not supported: `SET`/`UNSET COMMENT`, `ALTER COLUMN ... SET DATA TYPE`, `DROP NOT NULL`, `CLUSTER BY`, `ADD`/`DROP CONSTRAINT`, `SWAP WITH`, `SET`/`UNSET TAG`, and the retention settings. |
| [`ALTER VIEW`](https://docs.snowflake.com/en/sql-reference/sql/alter-view), [`ALTER SCHEMA`](https://docs.snowflake.com/en/sql-reference/sql/alter-schema) | Not supported | Neither `RENAME TO` nor `SET COMMENT` is accepted. |
| [`CREATE SCHEMA ... CLONE`](https://docs.snowflake.com/en/sql-reference/sql/create-schema) | Not supported | The objects in the source schema are not copied. |
| [`CREATE DATABASE`](https://docs.snowflake.com/en/sql-reference/sql/create-database), `DROP DATABASE` | Supported | `IF NOT EXISTS` and `IF EXISTS` are supported. Not supported: `OR REPLACE`, `CLONE`, the Snowflake platform options (`TRANSIENT`, retention, and so on), and `UNDROP`. |
| [`USE DATABASE`](https://docs.snowflake.com/en/sql-reference/sql/use-database) | Supported | `USE <db>` and `USE DATABASE <db>` both switch the active database (client protocol 2.0+ required). `USE SCHEMA`, `USE WAREHOUSE`, and `USE ROLE` are not supported. |
| [`SET`](https://docs.snowflake.com/en/sql-reference/sql/set), [`UNSET`](https://docs.snowflake.com/en/sql-reference/sql/unset) | Not supported | Firebolt has no `SET` statement; its settings are passed as query parameters. Session variables and `$var` are not available. |
| [`CREATE MATERIALIZED VIEW`](https://docs.snowflake.com/en/sql-reference/sql/create-materialized-view) | Not supported | |
| `CREATE HYBRID TABLE`, `CREATE ICEBERG TABLE`, `CREATE EVENT TABLE`, `CREATE EXTERNAL TABLE`, `CREATE DYNAMIC TABLE` | Not supported | |
| [`CREATE FUNCTION`](https://docs.snowflake.com/en/sql-reference/sql/create-function), [`CREATE PROCEDURE`](https://docs.snowflake.com/en/sql-reference/sql/create-procedure), `CALL`, `EXECUTE IMMEDIATE` | Not supported | |
| [`CREATE STAGE`](https://docs.snowflake.com/en/sql-reference/sql/create-stage), `CREATE FILE FORMAT`, `CREATE PIPE`, `PUT`, `GET`, `LIST`, `REMOVE` | Not supported | |
| [`CREATE STREAM`](https://docs.snowflake.com/en/sql-reference/sql/create-stream), `CREATE TASK`, `CREATE ALERT`, `CREATE SEQUENCE` | Not supported | |
| [`DESCRIBE`](https://docs.snowflake.com/en/sql-reference/sql/desc) | Supported | `DESCRIBE`/`DESC TABLE` returns the column listing. |
| [`SHOW`](https://docs.snowflake.com/en/sql-reference/sql/show) | Partial | `SHOW TABLES`, `SHOW VIEWS`, and `SHOW DATABASES` are supported, with the `LIKE`, `STARTS WITH`, `IN DATABASE`/`IN SCHEMA`, and `LIMIT` clauses (their columns follow Firebolt, not Snowflake). `SHOW SCHEMAS`/`SHOW OBJECTS` are not. |
| `COMMENT ON` | Not supported | |

## Data manipulation language

| Statement | Support | Notes |
| :- | :- | :- |
| [`INSERT`](https://docs.snowflake.com/en/sql-reference/sql/insert) | Supported | `INSERT ... VALUES` and `INSERT ... SELECT`. |
| [`UPDATE`](https://docs.snowflake.com/en/sql-reference/sql/update) | Supported | Including `UPDATE ... FROM`. |
| [`DELETE`](https://docs.snowflake.com/en/sql-reference/sql/delete) | Supported | Including `DELETE ... USING`. |
| [`TRUNCATE TABLE`](https://docs.snowflake.com/en/sql-reference/sql/truncate-table) | Supported | |
| [`MERGE`](https://docs.snowflake.com/en/sql-reference/sql/merge) | Supported | `WHEN MATCHED THEN UPDATE`/`DELETE` and `WHEN NOT MATCHED THEN INSERT`. |
| [`INSERT OVERWRITE`](https://docs.snowflake.com/en/sql-reference/sql/insert), `INSERT ALL` | Not supported | |
| [`COPY INTO`](https://docs.snowflake.com/en/sql-reference/sql/copy-into-table) | Not supported | Table and location forms. |

## Transaction control

| Statement | Support | Notes |
| :- | :- | :- |
| [`BEGIN`](https://docs.snowflake.com/en/sql-reference/sql/begin) | Supported | `BEGIN TRANSACTION` and `START TRANSACTION` are accepted synonyms. |
| [`COMMIT`](https://docs.snowflake.com/en/sql-reference/sql/commit) | Supported | |
| [`ROLLBACK`](https://docs.snowflake.com/en/sql-reference/sql/rollback) | Supported | |

## Data control language

Roles and object privileges map onto Firebolt's native [access control](/reference-sql/commands/access-control/create-role). A Snowflake form with no Firebolt equivalent is rejected with an error rather than silently mistranslated, so a migrated script never grants more or less than it states.

| Statement | Support | Notes |
| :- | :- | :- |
| [`CREATE ROLE`](https://docs.snowflake.com/en/sql-reference/sql/create-role) | Supported | `IF NOT EXISTS`. `CREATE DATABASE ROLE` is not supported. |
| [`GRANT <privilege>`](https://docs.snowflake.com/en/sql-reference/sql/grant-privilege), [`REVOKE <privilege>`](https://docs.snowflake.com/en/sql-reference/sql/revoke-privilege) | With limitations | `SELECT` (with an optional column list), `INSERT`, `UPDATE`, `DELETE`, `TRUNCATE`, `USAGE`, and `EXECUTE` (on a function), on a `TABLE`, `VIEW`, `DATABASE`, `SCHEMA`, or `FUNCTION`. The recipient is a role, given as `TO ROLE r`, a bare `TO r`, or `TO PUBLIC`. |
| [`GRANT ROLE`](https://docs.snowflake.com/en/sql-reference/sql/grant-role), [`REVOKE ROLE`](https://docs.snowflake.com/en/sql-reference/sql/revoke-role) | Supported | Role membership: `GRANT ROLE r TO ROLE`/`TO USER`. |
| `CREATE USER`, masking and row-access policies, tags | Not supported | |

The following are rejected with an error: `GRANT ALL` and `GRANT MODIFY` (Firebolt's `ALL` and `MODIFY` both cover `DROP`, which Snowflake reserves for `OWNERSHIP`, so mapping either would grant more than Snowflake's), `OWNERSHIP` and `REFERENCES`, `ON ACCOUNT` and other account-level privileges, `ALL`/`FUTURE ... IN SCHEMA`, granting a privilege directly to a user, and the `WITH GRANT OPTION`, `GRANTED BY`, `AS GRANTOR`, and `CASCADE`/`RESTRICT` modifiers. To grant on a table named `account`, quote the name.

## Limitations

* DDL returns no result set. Snowflake returns a status message such as `Table T successfully created.`
* DML returns no result set. Snowflake returns the affected-row counts.
* Fully qualified three-part `database.schema.table` names are not supported; see [Query syntax](/reference-sql/snowflake/query-syntax).
* Warehouses, `ALTER SESSION`, and session variables are not supported, nor are integrations, external volumes, shares, applications, Streamlit, Cortex services, and replication or failover groups.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.