# PAQL - Priax Asset Query Language

Manual rápido para entendimento da sintaxe da linguagem PAQL, usada para consultar ICs na CMDB do Priax.

# PAQL Quick Reference

# PAQL (Priax Asset Query Language) Quick Reference

<div class="toc" id="bkmrk-conte%C3%BAdo-1%29-o-que-%C3%A9-">**Conteúdo**- [1) O que é a PAQL e para que ela serve](#bkmrk-1%29-o-que-%C3%A9-a-paql-e-)
- [2) Conceitos: CI Types e Related CI Types](#bkmrk-2%29-conceitos%3A-ci-typ)
- [3) Estrutura geral de uma PAQL](#bkmrk-3%29-estrutura-geral-d)
- [4) Blocos da PAQL](#bkmrk-4%29-blocos-da-paql)
- [5) Exemplos completos](#bkmrk-5%29-exemplos-completo)
- [6) Checklist rápido](#bkmrk-6%29-checklist-r%C3%A1pido-)

</div>## 1) O que é a PAQL e para que ela serve

**PAQL (Priax Asset Query Language)** é a linguagem de consulta usada no Priax para **pesquisar ativos (CIs)** na CMDB, filtrando por tipos de IC, atributos do próprio IC, pelas relações do IC e, quando necessário, **pesquisar por características de ICs relacionados** (por vínculos/relacionamentos) ao IC que se deseja encontrar/listar.

Com a PAQL você consegue:

- Selecionar **quais tipos de ativos** (citype) você quer listar (ex.: *Servers*, *Web Application*).
- Filtrar ativos por **atributos/campos** (ex.: Nome, Fabricante, Tipo de criação).
- Filtrar por relações que o ativo possui.
- Restringir a pesquisa a ativos **relacionados** por um tipo de relação (ex.: *Service Owned*, *Composes*) com algum outro IC (relatedcitype).
- Definir quais campos devem voltar no resultado (**returns**) e como nomeá-los (**alias**).
- Ordenar o resultado (**orders**).

A PAQL é composta por **blocos**, e cada bloco tem um papel específico na filtragem dos ativos. Você monta uma expressão juntando blocos em sequência.

---

## 2) Conceitos: CI Types e Related CI Types

### CI Types (`citype`)

Um **CI Type** (ou `citype`) é o **tipo do ativo principal** que você quer buscar.

Exemplos comuns: `Servers`, `Team`, `Web Application`, `Relational Databases`.

Quando você usa apenas `citype`, a consulta busca ativos **somente desse tipo**, sem obrigar a existência de relacionamento com outro ativo.

### Related CI Types (`relatedcitype`)

Um **Related CI Type** (ou `relatedcitype`) é o **tipo do ativo relacionado** ao seu ativo principal (o “outro lado” da relação).

> “Quero achar ativos do tipo **A** que estejam relacionados a ativos do tipo **B** (e possivelmente filtrar o B também).”

---

## 3) Estrutura geral de uma PAQL

Uma PAQL é um texto com um ou mais blocos:

```
ictypefilters{...}
relsfilters{...}
cifilters{...}
relatedcifilters{...}
returns{...}
orders{...}
```

### Regras gerais importantes

- Blocos são escritos como: `nomeDoBloco{ ... }`
- Dentro de alguns blocos, você pode combinar condições usando a palavra **`and`**.
- Listas são escritas como: `["Valor 1","Valor 2"]`
- Campos/atributos são referenciados como strings entre aspas no formato: `"Grupo\Campo"`

---

## 4) Blocos da PAQL

### 4.1) `ictypefilters{...}` — Tipos de ativos (principal e relacionado)

Para identificar o tipo do IC que se deseja filtrar podemos usar o nome dos grupos ou dos tipos de IC.

Para identificar o nome de um grupo de ICs navegue para a aba "Por Grupo" da árvore de IC e identifique o nome de um grupo na árvore:

[![image.png](https://docs.app.priax.io/uploads/images/gallery/2026-03/scaled-1680-/sngimage.png)](https://docs.app.priax.io/uploads/images/gallery/2026-03/sngimage.png)

Nome de um tipo específico de IC:

[![image.png](https://docs.app.priax.io/uploads/images/gallery/2026-03/scaled-1680-/38uimage.png)](https://docs.app.priax.io/uploads/images/gallery/2026-03/38uimage.png)

Define o tipo do ativo principal (`citype`) e, opcionalmente, o tipo do ativo relacionado (`relatedcitype`).

**Sintaxe**

```
ictypefilters{citype in ["Tipo A","Tipo B"]}
```

Ou com ativo relacionado:

```
ictypefilters{citype in ["Tipo A","Tipo B"] and relatedcitype in ["Tipo C"]}
```

**Exemplos**

```
ictypefilters{citype in ["Web Application"]}
```

```
ictypefilters{citype in ["Team"] and relatedcitype in ["Web Application"]}
```

> Dica: se você informar `relatedcitype `você também poderá usará `relsfilters{...}` e/ou `relatedcifilters{...}`.

### 4.2) `relsfilters{...}` — Quais relacionamentos considerar (entrada e saída)

Restringe por quais tipos de relacionamento os ativos devem estar ligados.

- `outrels in [...]` (relações “de saída”)
- `inrels in [...]` (relações “de entrada”)

Para identificar o nome de um relacionamento veja os relacionamentos dos ICs na tela do Priax:

[![image.png](https://docs.app.priax.io/uploads/images/gallery/2026-03/scaled-1680-/jpkimage.png)](https://docs.app.priax.io/uploads/images/gallery/2026-03/jpkimage.png)

Neste caso temos três tipos de relação:

- Depends On
- Lan Connected
- Incident Manager

**Sintaxe**

```
relsfilters{inrels in ["Nome da Relação"]}
```

```
relsfilters{outrels in ["Nome da Relação"]}
```

```
relsfilters{outrels in ["Relação A"] and inrels in ["Relação B"]}
```

**Exemplos**

```
relsfilters{inrels in ["Service Owner"]}
```

```
relsfilters{outrels in ["Service Owned"] and inrels in ["Service Owner"]}
```

```
relsfilters{outrels in ["Is Composed"] and inrels in ["Composes"]}
```

### 4.3) `cifilters{...}` — Filtros por atributos do ativo principal (A)

Filtra o ativo principal por campos/atributos.

Para definir o nome do atributo, veja na tela de edição do IC no Priax:

[![image.png](https://docs.app.priax.io/uploads/images/gallery/2026-03/scaled-1680-/RGkimage.png)](https://docs.app.priax.io/uploads/images/gallery/2026-03/RGkimage.png)

Neste caso de exemplo ao editar o Sistema Operacional de um servidor, temos a aba "Basic Network Address" e o atributo "Hostname". Devemos usar portanto para filtrar por esse atributo "Basic Network Address\\Hostname".

**Sintaxe**

```
"Grupo\Campo" = "Valor"
```

Múltiplas condições:

```
cifilters{"Grupo\Campo 1" = "Valor 1" and "Grupo\Campo 2" = "Valor 2"}
```

**Exemplos**

```
cifilters{"General\Name" = "Windows 2016"}
```

```
cifilters{"General\Create Type" = "Manual"}
```

E por fim, para filtrar especificamente pelo servidor da imagem de exemplo usaríamos:

```
cifilters{"Basic Network Address\Hostname" = "srvapp01"}
```

### 4.4) `relatedcifilters{...}` — Filtros por atributos do ativo relacionado (B)

Filtra o ativo relacionado por campos/atributos.

**Sintaxe**

```
relatedcifilters{"Grupo\Campo" = "Valor"}
```

**Exemplos**

```
relatedcifilters{"General\Name" = "CRM"}
```

```
relatedcifilters{"General\Name" = "C:"}
```

### 4.5) `returns{...}` — Quais campos retornar (colunas) e aliases

Define quais atributos serão devolvidos no resultado.

**Sintaxe**

```
returns{"Grupo\Campo" as Alias, "Grupo\Campo 2" as Alias2, "Grupo\Campo 3"}
```

**Exemplos**

```
returns{"General\Name" as Name}
```

```
returns{
  "Basic Network Addresses\Manage IP Addresses" as IP,
  "General\Name" as Name,
  "Basic Network Addresses\Hostname" as Hostname
}
```

> Boa prática: use `as` para nomes curtos (ex.: `Name`, `Hostname`, `IP`).

### 4.6) `orders{...}` — Ordenação

Define a ordenação dos resultados, normalmente pelo **alias** definido em `returns`.

**Sintaxe**

```
orders{Alias}
```

**Exemplos**

```
orders{Name,Hostname}
```

```
orders{Hostname}
```

---

## 5) Exemplos completos (prontos para uso)

### Exemplo A — Web Application (sem relacionamentos)

```
ictypefilters{citype in ["Web Application"]}
returns{"General\Name" as Name}
orders{Name}
```

### Exemplo B — Team relacionado a Web Application (filtrando a aplicação)

```
ictypefilters{citype in ["Team"] and relatedcitype in ["Web Application"]}
relsfilters{outrels in ["Service Owned"] and inrels in ["Service Owner"]}
relatedcifilters{"General\Name" = "CRM"}
returns{"General\Name" as Name}
orders{Name}
```

### Exemplo C — Server relacionado a Windows Disk Volume (filtrando ambos)

```
ictypefilters{citype in ["Servers"] and relatedcitype in ["Windows Disk Volume"]}
relsfilters{outrels in ["Is Composed"] and inrels in ["Composes"]}
cifilters{"General\Name" = "Windows 2016"}
relatedcifilters{"General\Name" = "C:"}
returns{
  "Basic Network Addresses\Manage IP Addresses" as IP,
  "General\Name" as Name,
  "Basic Network Addresses\Hostname" as Hostname
}
orders{Hostname}
```

---

## 6) Checklist rápido para montar sua PAQL

1. Escolha o tipo principal: `ictypefilters{citype in ["..."]}`
2. Se existir um “lado relacionado”, adicione: 
    - `relatedcitype in ["..."]`
    - `relsfilters{...}`
    - `relatedcifilters{...}` (se precisar filtrar o relacionado)
3. Filtre o principal com `cifilters{...}` (se necessário)
4. Defina colunas com `returns{...}`
5. Ordene com `orders{...}` (normalmente pelo alias)