---
title: Execute a tabular DDSQL query
description: Datadog, the leading service for cloud-scale monitoring.
breadcrumbs: Docs > API Reference > DDSQL
---

> For the complete documentation index, see [llms.txt](https://docs.datadoghq.com/llms.txt).

# Execute a tabular DDSQL query{% #execute-a-tabular-ddsql-query %}
Copy pageCopied
{% tab title="v2" %}

| Datadog site      | API endpoint                                                  |
| ----------------- | ------------------------------------------------------------- |
| ap1.datadoghq.com | POST https://api.ap1.datadoghq.com/api/v2/ddsql/query/tabular |
| ap2.datadoghq.com | POST https://api.ap2.datadoghq.com/api/v2/ddsql/query/tabular |
| app.datadoghq.eu  | POST https://api.datadoghq.eu/api/v2/ddsql/query/tabular      |
| app.ddog-gov.com  | POST https://api.ddog-gov.com/api/v2/ddsql/query/tabular      |
| us2.ddog-gov.com  | POST https://api.us2.ddog-gov.com/api/v2/ddsql/query/tabular  |
| uk1.datadoghq.com | POST https://api.uk1.datadoghq.com/api/v2/ddsql/query/tabular |
| app.datadoghq.com | POST https://api.datadoghq.com/api/v2/ddsql/query/tabular     |
| us3.datadoghq.com | POST https://api.us3.datadoghq.com/api/v2/ddsql/query/tabular |
| us5.datadoghq.com | POST https://api.us5.datadoghq.com/api/v2/ddsql/query/tabular |

### Overview

Submit a DDSQL statement and return either a `running` state with an opaque `query_id` for the client to poll, or a `completed` state with the column-major result set inlined when the query finishes quickly enough to be served synchronously.

### Request

#### Body Data (required)



{% tab title="Model" %}

| Parent field | Field                            | Type   | Description                                                                                                                                                                                                                                                                                  |
| ------------ | -------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|              | data [*required*]           | object | JSON:API resource object for a DDSQL tabular query execution request.                                                                                                                                                                                                                        |
| data         | attributes [*required*]     | object | Attributes describing the DDSQL query to execute.                                                                                                                                                                                                                                            |
| attributes   | query [*required*]          | string | The DDSQL statement to execute. DDSQL is Datadog's SQL dialect, which is a subset of PostgreSQL, scoped to Datadog data sources.                                                                                                                                                             |
| attributes   | row_limit                        | int64  | Cap on the number of rows returned. Defaults to 5,000 when omitted. Must be between 1 and 10,000 inclusive; values outside this range are rejected with 400.                                                                                                                                 |
| attributes   | time [*required*]           | object | Time window scoping the underlying data sources, expressed in Unix milliseconds since the epoch. Inclusive on `from_timestamp`, exclusive on `to_timestamp`. Results from static tables (for example, `dd.hosts`) are not affected by the time window, but the field must still be provided. |
| time         | from_timestamp [*required*] | int64  | Start of the query window (inclusive), in Unix milliseconds since the epoch.                                                                                                                                                                                                                 |
| time         | to_timestamp [*required*]   | int64  | End of the query window (exclusive), in Unix milliseconds since the epoch.                                                                                                                                                                                                                   |
| data         | type [*required*]           | enum   | JSON:API resource type for a DDSQL tabular query request. Allowed enum values: `ddsql_query_request`                                                                                                                                                                                         |

{% /tab %}

{% tab title="Example" %}

```json
{
  "data": {
    "attributes": {
      "query": "SELECT cloud_provider, count(*) FROM dd.hosts group by cloud_provider",
      "row_limit": 1000,
      "time": {
        "from_timestamp": 1736942400000,
        "to_timestamp": 1736946000000
      }
    },
    "type": "ddsql_query_request"
  }
}
```

{% /tab %}

### Response

{% tab title="200" %}
OK
{% tab title="Model" %}
Response envelope for both the execute and fetch DDSQL tabular query endpoints. Carries the JSON:API primary resource and a top-level `meta` block with request-scoped observability handles.

| Parent field | Field                        | Type     | Description                                                                                                                                                                                                                                                                                                       |
| ------------ | ---------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|              | data [*required*]       | object   | JSON:API resource object for a DDSQL tabular query response.                                                                                                                                                                                                                                                      |
| data         | attributes [*required*] | object   | Attributes of a DDSQL tabular query response. `query_id` is set when `state` is `running`; `columns` is set when `state` is `completed`.                                                                                                                                                                          |
| attributes   | columns                      | [object] | Column-major result set. Each element carries one column's name, type, and values, with one value per row of the result. Set when `state` is `completed`.                                                                                                                                                         |
| columns      | name [*required*]       | string   | Name of the column as projected by the SQL statement.                                                                                                                                                                                                                                                             |
| columns      | type [*required*]       | string   | DDSQL data type of the column's values, for example `VARCHAR`, `BIGINT`, `DECIMAL`, `BOOLEAN`, `TIMESTAMP`, `JSON`, or an array variant such as `VARCHAR[]`. See the [DDSQL data-types reference](https://docs.datadoghq.com/ddsql_reference.md#data-types) for the full, up-to-date list.                        |
| columns      | values [*required*]     | []       | Column values in row order, one entry per result row. The element type follows the column's `type`. The following serialization rules should be taken into account:                                                                                                                                               | `null` is allowed for any column type where a value is missing. |
| attributes   | query_id                     | string   | Opaque token to pass to the fetch endpoint to poll for results. Set when `state` is `running` and absent when `state` is `completed`.                                                                                                                                                                             |
| attributes   | state [*required*]      | enum     | Lifecycle state of a DDSQL tabular query response. `running` means the query is still executing and the client should poll the fetch endpoint with the returned `query_id`. `completed` means the result set is inlined in `columns` and no further polling is required. Allowed enum values: `running,completed` |
| attributes   | warnings                     | [string] | Non-fatal messages emitted by the query engine while serving this response.                                                                                                                                                                                                                                       |
| data         | id [*required*]         | string   | Stable identifier for the query response resource.                                                                                                                                                                                                                                                                |
| data         | type [*required*]       | enum     | JSON:API resource type for a DDSQL tabular query response. Allowed enum values: `ddsql_query_response`                                                                                                                                                                                                            |
|              | meta [*required*]       | object   | Top-level JSON:API meta block accompanying every DDSQL tabular query response. Carries standard observability handles for client-side correlation.                                                                                                                                                                |
| meta         | elapsed [*required*]    | int64    | Server-side time spent serving this request, in milliseconds.                                                                                                                                                                                                                                                     |
| meta         | request_id [*required*] | string   | Echo of the `DD-Request-ID` header assigned by Datadog's edge to this request, for support correlation.                                                                                                                                                                                                           |

{% /tab %}

{% tab title="Example" %}

```json
{
  "data": {
    "attributes": {
      "columns": [
        {
          "name": "service",
          "type": "VARCHAR",
          "values": [
            "web-store",
            "checkout"
          ]
        }
      ],
      "query_id": "eyJxdWVyeSI6ICJTRUxFQ1QgKiBGUk9NIGxvZ3MifQ==",
      "state": "completed",
      "warnings": [
        "Query result was truncated at the configured row_limit."
      ]
    },
    "id": "00000000-0000-0000-0000-000000000000",
    "type": "ddsql_query_response"
  },
  "meta": {
    "elapsed": 87,
    "request_id": "req-7f3e7d2c-1a0b-4d3e-9b2a-3c4d5e6f7082"
  }
}
```

{% /tab %}

{% /tab %}

{% tab title="400" %}
Bad Request
{% tab title="Model" %}
API error response.

| Parent field | Field                    | Type     | Description                                                                     |
| ------------ | ------------------------ | -------- | ------------------------------------------------------------------------------- |
|              | errors [*required*] | [object] | A list of errors.                                                               |
| errors       | detail                   | string   | A human-readable explanation specific to this occurrence of the error.          |
| errors       | meta                     | object   | Non-standard meta-information about the error                                   |
| errors       | source                   | object   | References to the source of the error.                                          |
| source       | header                   | string   | A string indicating the name of a single request header which caused the error. |
| source       | parameter                | string   | A string indicating which URI query parameter caused the error.                 |
| source       | pointer                  | string   | A JSON pointer to the value in the request document that caused the error.      |
| errors       | status                   | string   | Status code of the response.                                                    |
| errors       | title                    | string   | Short human-readable summary of the error.                                      |

{% /tab %}

{% tab title="Example" %}

```json
{
  "errors": [
    {
      "detail": "Missing required attribute in body",
      "meta": {},
      "source": {
        "header": "Authorization",
        "parameter": "limit",
        "pointer": "/data/attributes/title"
      },
      "status": "400",
      "title": "Bad Request"
    }
  ]
}
```

{% /tab %}

{% /tab %}

{% tab title="403" %}
Forbidden
{% tab title="Model" %}
API error response.

| Parent field | Field                    | Type     | Description                                                                     |
| ------------ | ------------------------ | -------- | ------------------------------------------------------------------------------- |
|              | errors [*required*] | [object] | A list of errors.                                                               |
| errors       | detail                   | string   | A human-readable explanation specific to this occurrence of the error.          |
| errors       | meta                     | object   | Non-standard meta-information about the error                                   |
| errors       | source                   | object   | References to the source of the error.                                          |
| source       | header                   | string   | A string indicating the name of a single request header which caused the error. |
| source       | parameter                | string   | A string indicating which URI query parameter caused the error.                 |
| source       | pointer                  | string   | A JSON pointer to the value in the request document that caused the error.      |
| errors       | status                   | string   | Status code of the response.                                                    |
| errors       | title                    | string   | Short human-readable summary of the error.                                      |

{% /tab %}

{% tab title="Example" %}

```json
{
  "errors": [
    {
      "detail": "Missing required attribute in body",
      "meta": {},
      "source": {
        "header": "Authorization",
        "parameter": "limit",
        "pointer": "/data/attributes/title"
      },
      "status": "400",
      "title": "Bad Request"
    }
  ]
}
```

{% /tab %}

{% /tab %}

{% tab title="429" %}
Too many requests
{% tab title="Model" %}
API error response.

| Field                    | Type     | Description       |
| ------------------------ | -------- | ----------------- |
| errors [*required*] | [string] | A list of errors. |

{% /tab %}

{% tab title="Example" %}

```json
{
  "errors": [
    "Bad Request"
  ]
}
```

{% /tab %}

{% /tab %}

{% tab title="500" %}
Internal Server Error
{% tab title="Model" %}
API error response.

| Parent field | Field                    | Type     | Description                                                                     |
| ------------ | ------------------------ | -------- | ------------------------------------------------------------------------------- |
|              | errors [*required*] | [object] | A list of errors.                                                               |
| errors       | detail                   | string   | A human-readable explanation specific to this occurrence of the error.          |
| errors       | meta                     | object   | Non-standard meta-information about the error                                   |
| errors       | source                   | object   | References to the source of the error.                                          |
| source       | header                   | string   | A string indicating the name of a single request header which caused the error. |
| source       | parameter                | string   | A string indicating which URI query parameter caused the error.                 |
| source       | pointer                  | string   | A JSON pointer to the value in the request document that caused the error.      |
| errors       | status                   | string   | Status code of the response.                                                    |
| errors       | title                    | string   | Short human-readable summary of the error.                                      |

{% /tab %}

{% tab title="Example" %}

```json
{
  "errors": [
    {
      "detail": "Missing required attribute in body",
      "meta": {},
      "source": {
        "header": "Authorization",
        "parameter": "limit",
        "pointer": "/data/attributes/title"
      },
      "status": "400",
      "title": "Bad Request"
    }
  ]
}
```

{% /tab %}

{% /tab %}

### Code Example

##### 
                  \## default
# 
 \# Curl command curl -X POST "https://api.datadoghq.com/api/v2/ddsql/query/tabular" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "DD-API-KEY: ${DD_API_KEY}" \
-H "DD-APPLICATION-KEY: ${DD_APP_KEY}" \
-d @- << EOF
{
  "data": {
    "attributes": {
      "query": "SELECT cloud_provider, count(*) FROM dd.hosts group by cloud_provider",
      "row_limit": 1000,
      "time": {
        "from_timestamp": 1736942400000,
        "to_timestamp": 1736946000000
      }
    },
    "type": "ddsql_query_request"
  }
}
EOF 
                
{% /tab %}
