# DESCRIBE \<statement>

## Syntax

```sql
DESCRIBE statement;
```

## Description

This command provides details about the objects used by a `CREATE_RELATION`, `INSERT INTO`, or `CREATE AS SELECT` statement.

The statement is described only if the current role has the `USAGE` privilege on the [Database](/overview/core-concepts/databases.md), [Schema](/overview/core-concepts/databases.md#schema), [Store](/overview/core-concepts/store.md), and [Relation](/overview/core-concepts/databases.md#relation) used in the statement.

### Arguments <a href="#parameters" id="parameters"></a>

#### statement

Any of the executable statements including [CREATE STREAM](/reference/sql-syntax/ddl/create-stream.md), [CREATE CHANGELOG](/reference/sql-syntax/ddl/create-changelog.md), [CREATE STREAM AS SELECT](/reference/sql-syntax/query/create-stream-as.md), [CREATE CHANGELOG AS SELECT](/reference/sql-syntax/query/create-changelog-as.md), [CREATE MATERIALIZED VIEW AS](/reference/sql-syntax/query/materialized-view/create-materialized-view-as.md), [CREATE TABLE AS SELECT](/reference/sql-syntax/query/create-table-as.md).

<details>

<summary>Response Columns</summary>

* `type`: Provides the type of the statement being described.
* `info`: A key-value list of objects used within the statement and specific information about them:
  * `ddl`/`sink`: A new relation the statement creates to write to — or, respectively, an existing relation to which the statement writes new records.
    * Provides `fqn`, `type`, `db_name`, `schema_name`, `name`, and `store_name`. A `fqn` is in the format of `org.db.schema.relation`.
  * `Sources`: List of relations the statement uses for reading records.
    * Provides `fqn`, `type`, `db_name`, `schema_name`, `name`, and `store_name`.

</details>

## Examples

#### Describe a stream DDL statement

In this example, a `CREATE STREAM` statement returns a `ddl` field for the `pageviews` stream that would be created if the statement was executed:

```sh
demodb.public/demostore# DESCRIBE CREATE STREAM pageviews (viewtime BIGINT, userid VARCHAR, pageid VARCHAR) WITH ('value.format'='json', 'topic.partitions'='5', 'topic.replicas'='5');
+---------------+------------------------------------------+
|  Type         |  Info                                    |
+===============+==========================================+
| CREATE_STREAM | {"ddl":{"fqn":"d39511ce-c918-4637-9524-1 |
|               | 63183452274.demodb.public.pageviews","ty |
|               | pe":"STREAM","db_name":"demodb","schema_ |
|               | name":"public","name":"pageviews","store |
|               | _name":"demostore"}}                     |
+---------------+------------------------------------------+
```

#### Describe a CCAS filter statement

In this example, `pageviewscl` [Database](/overview/core-concepts/databases.md#changelog) is filtered and writes its result into `pageviewscl_6` changelog:

```sh
demodb.public/demostore# DESCRIBE CREATE CHANGELOG PAGEVIEWSCL_6 AS SELECT userid, pageid FROM PAGEVIEWSCL WHERE userid = 'User_6';
+---------------------+------------------------------------------+
|  Type               |  Info                                    |
+=====================+==========================================+
| CREATE_CHANGELOG_AS | {"ddl":{"fqn":"d39511ce-c918-4637-9524-1 |
|                     | 63183452274.demodb.public.pageviewscl_6" |
|                     | ,"type":"CHANGELOG","db_name":"demodb"," |
|                     | schema_name":"public","name":"pageviewsc |
|                     | l_6","store_name":"demostore"},"sources" |
|                     | :[{"fqn":"d39511ce-c918-4637-9524-163183 |
|                     | 452274.demodb.public.pageviewscl","type" |
|                     | :"CHANGELOG","db_name":"demodb","schema_ |
|                     | name":"public","name":"pageviewscl","sto |
|                     | re_name":"demostore"}]}                  |
+---------------------+------------------------------------------+

```

#### Describe a CSAS JOIN statement

In this example, the described statement joins the `pageviews` [Database](/overview/core-concepts/databases.md#stream) and `users1Changelog` changelog before filtering and writing its results into the `temporaljoin` stream:

```sh
demodb.public/demostore# DESCRIBE CREATE STREAM temporaljoin AS SELECT p.userid AS pvuid, u.userid, u.gender, p.pageid, u.interests[1] AS top_interest FROM pageviews p JOIN "users1Changelog" u ON u.userid = p.userid WHERE p.userid != 'User_5';
+------------------+------------------------------------------+
|  Type            |  Info                                    |
+==================+==========================================+
| CREATE_STREAM_AS | {"ddl":{"fqn":"d39511ce-c918-4637-9524-1 |
|                  | 63183452274.demodb.public.temporaljoin", |
|                  | "type":"STREAM","db_name":"demodb","sche |
|                  | ma_name":"public","name":"temporaljoin", |
|                  | "store_name":"demostore"},"sources":[{"f |
|                  | qn":"d39511ce-c918-4637-9524-16318345227 |
|                  | 4.demodb.public.pageviews","type":"STREA |
|                  | M","db_name":"demodb","schema_name":"pub |
|                  | lic","name":"pageviews","store_name":"de |
|                  | mostore"},{"fqn":"d39511ce-c918-4637-952 |
|                  | 4-163183452274.demodb.public.users1Chang |
|                  | elog","type":"CHANGELOG","db_name":"demo |
|                  | db","schema_name":"public","name":"users |
|                  | 1Changelog","store_name":"demostore"}]}  |
+------------------+------------------------------------------+
```

#### Describe an INSERT INTO statement

The example below shows that the statement filters the `pageviews` stream and writes its results into the existing relation called `pageviews_6` of type `stream`:

```sh
demodb.public/demostore# DESCRIBE INSERT INTO PAGEVIEWS_6 SELECT userid, pageid FROM PAGEVIEWS WHERE userid = 'User_6';
+-------------+------------------------------------------+
|  Type       |  Info                                    |
+=============+==========================================+
| INSERT_INTO | {"sink":{"fqn":"d39511ce-c918-4637-9524- |
|             | 163183452274.demodb.public.pageviews_6", |
|             | "type":"STREAM","db_name":"demodb","sche |
|             | ma_name":"public","name":"pageviews_6"," |
|             | store_name":"demostore"},"sources":[{"fq |
|             | n":"d39511ce-c918-4637-9524-163183452274 |
|             | .demodb.public.pageviews","type":"STREAM |
|             | ","db_name":"demodb","schema_name":"publ |
|             | ic","name":"pageviews","store_name":"dem |
|             | ostore"}]}                               |
+-------------+------------------------------------------+
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.deltastream.io/reference/sql-syntax/command/describe-less-than-statement-greater-than.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
