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

# Differences between Datadog and PromQL functions and operators

> Find PromQL equivalents for Datadog functions and operators, including rollups, aggregations, and arithmetic.

Datadog is a metrics platform that uses a proprietary query language to aggregate
and visualize data.

Learn more about:

* [Datadog queries](/ingest/metrics-traces/collector/mappings/datadog/dogstatsd)
* [Querying Prometheus](https://prometheus.io/docs/prometheus/latest/querying/basics/)
* [Prometheus operators and the Chronosphere Collector](/ingest/metrics-traces/collector/mappings/prometheus/operator-collector)
* [Field equivalents for monitors](/ingest/metrics-traces/collector/mappings/datadog/convert-monitors#field-mapping)
  in Palo Alto Networks Cortex XCOR and Datadog

The following sections are an approximate mapping between Datadog functions and
operators, and those used in PromQL. In some cases, more than one PromQL function is
mapped to a single Datadog function. When PromQL has more than one related function
in the table, one of the options might be a better match for what the user needs a
query to accomplish.

For example, the Datadog function `abs()`, when translated to a PromQL query,
might match `abs()`, `absent()`, or `absent_over_time()` depending on the query.

## Rollups

Datadog uses rollups to aggregate data points in a single time series, and are applied
using the `.rollup()` function. Cortex XCOR supports
[defining rollups only on ingest](/control/shaping/shape-metrics/rules), not at query time.
However, PromQL offers a
[set of functions](https://prometheus.io/docs/prometheus/latest/querying/functions/#aggregation_over_time)
that lets you aggregate individual time series over time.

## Functions

| Datadog | PromQL | Notes |
| - | - | - |
| `abs()` | `abs()` | *none* |
| | `absent()` | *none* |
| | `absent_over_time()` | *none* |
| `round()` | `ceil()` | Datadog rounds to the nearest integer. |
| | `changes()` | *none* |
| `ceil()` | `clamp_max()` | *none* |
| `floor()` | `clamp_min()` | *none* |
| | `day_of_month()` | *none* |
| | `day_of_week()` | *none* |
| | `days_in_month()` | *none* |
| `diff()` | `delta()` | `diff()` returns value difference between points. `delta()` requires specified first and last point in query. |
| `derivative()` | `deriv()` | Use `deriv()` only with gauges. |
| | `exp()` | *none* |
| `round()` | `round()` | Datadog rounds to the nearest integer. |
| `p50`, `p75`, `p90`, `p95`, `p99` | `histogram_quantile()` | PromQL needs specified percentile. Datadog is hard coded. |
| `autosmooth()` | `holt_winters()` | `autosmooth()` is dynamic. `holt_winters()` has you specify smooth and trend factors. |
| | `hour()` | *none* |
| | `idelta()` | *none* |
| | `increase()` | *none* |
| | `irate()` | *none* |
| | `label_join()` | *none* |
| | `label_replace()` | *none* |
| `exp()` | `ln()` | *none* |
| `log2()` | `log2()` | *none* |
| `log10()` | `log10()` | *none* |
| | `minute()` | *none* |
| | `month()` | *none* |
| | `predict_linear()` | *none* |
| `per_second()` | `rate()` | *none* |
| | `resets()` | *none* |
| | `floor()` | *none* |
| | `scalar()` | *none* |
| | `sort()` | *none* |
| | `sort_desc()` | *none* |
| | `sqrt()` | *none* |
| | `time()` | *none* |
| | `timestamp()` | *none* |
| | `vector()` | *none* |
| | `year()` | *none* |

## Time functions

| Datadog | PromQL | Notes |
| - | - | - |
| `avg_5min()`, `avg_10min`, `avg_30min()`, `avg_hourly()`, `avg_daily()` | `avg_over_time()` | PromQL needs specified interval. Datadog is coded. |
| `avg_daily()` | *N/A* | *none* |
| *N/A* | `min_over_time()` | *none* |
| *N/A* | `max_over_time()` | *none* |
| `sumsum()` | `sum_over_time()` | *none* |
| *N/A* | `count_over_time()` | *none* |
| *N/A* | `quantile_over_time()` | *none* |
| *N/A* | `stddev_over_time()` | *none* |
| *N/A* | `stdvar_over_time()` | *none* |

## Aggregations

| Datadog | PromQL | Notes |
| - | - | - |
| `sum()` | `sum()` | *none* |
| `min()` | `min()` | *none* |
| `max()` | `max()` | *none* |
| `avg()` | `avg()` | *none* |
| *N/A* | `group()` | *none* |
| *N/A* | `stddev()` | *none* |
| *N/A* | `stdvar()` | *none* |
| `count()` | `count()` | *none* |
| *N/A* | `count_values()` | *none* |
| *N/A* | `bottomk()` | *none* |
| *N/A* | `topk()` | *none* |
| *N/A* | `quantile()` | *none* |

## Binary operators

| Datadog | PromQL | Notes |
| - | :-: | - |
| none | `==` | *none* |
| none | `!=` | *none* |
| none | `>` | *none* |
| none | `<` | *none* |
| none | `>=` | *none* |
| none | `<=` | *none* |

## Boolean operations

| Datadog | PromQL | Notes |
| - | - | - |
| `and` | `and` | Intersection |
| `or` | `or` | Union |
| `not` | `unless` | Complement |
| `in` | *N/A* | *none* |
| `not in` | *N/A* | *none* |
| `!` | *N/A* | *none* |

## Operations

| Datadog | PromQL | Notes |
| :-: | :-: | - |
| `+` | `+` | *none* |
| `-` | `-` | *none* |
| `*` | `*` | *none* |
| `/` | `/` | *none* |
| `%` | `%` | *none* |
| `^` | `^` | *none* |


## Related topics

- [Experimental PromQL functions and operators](/investigate/querying/promql/experimental-functions.md)
- [Migration notes for SignalFx (Splunk) to PromQL](/ingest/metrics-traces/collector/mappings/signalfx.md)
- [Differences between the Prometheus Operator and Chronosphere Collector](/ingest/metrics-traces/collector/mappings/prometheus/operator-collector.md)
- [Applying PromQL functions](/investigate/querying/promql/apply-functions.md)
- [Migration notes for Tanzu (Wavefront) to PromQL](/ingest/metrics-traces/collector/mappings/wavefront.md)


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