OCI – Search bar e Advanced Resource Query

A barra de pesquisa do OCI está se tornando cada vez mais útil e funcional, com ela podemos inclusive pesquisar por um IP e identificar em qual máquina ele está vinculado:

Mas hoje quero falar um pouco sobre a opção Advanced Resource Query que potencializa a capacidade de pesquisa, permitindo que montemos nossas próprias consultas, lembrando que ao usar essa opção, ele vai buscar somente no Tenancy e região atual.

Recursos suportados

Devemos consultar aqui quais são os recursos suportados pela função de pesquisa, a coluna importante é a Resource Type que vamos usar nas consultas.

Sintaxe

De acordo com a documentação da oracle, a sintaxe que precisamos seguir é a seguinte:

query <resourceType> resources where <conditions> sorted by <fieldName> <order>
query <resourceType> resources matching <keywords>

Note que ambas começam com a palavra query, seguida do resourceType(que podemos consultar aqui) e após isso aplicamos as condições, para quem já trabalha com a linguagem SQL vai notar que as duas são bem parecidas.

A principal diferença entre elas é que ao usar where, você precisa especificar uma condição e ao usar matching ele busca pelo texto em todos os campos que ele da suporte.

Sendo assim, podemos procurar por instâncias que possuam SQL no nome das seguintes formas:

query
  instance resources
    where displayName=~'SQL'
query
  instance resources
    matching  'SQL'

Note que em ambos os exemplos, estou usando o resourceType instance, na primeira query busco instancias cujo o nome (displayName) contenha (=~) SQL e na segunda query ele busca por SQL em todos os campos.

Essa diferença fica mais evidente quando pesquisamos por todos os recursos do ambiente:

query
all resources
where displayname =~'SQL'

Perceba que não passei o tipo de recurso(apesar que na tela de pesquisa é possível filtrar) e ele me retornou discos de boot que possuem SQL no nome.

Operadores

Abaixo, listo quais operadores podem ser usados nas querys de acordo com a documentação da Oracle, mais uma vez, para quem já mexe com a linguagem SQL vai perceber a semelhança.

perationDescriptionSupported Field TypesCase-sensitive?Example
=Equals, or exact matching for stringsString, integer, rational, Boolean, date-timeNoIf the value was ˈbackUpˈ, it would match “backup”, “BACKUP”, “BackUp”, “backUp”, or any other variation in casing.
!=Does not equalString, integer, rational, Boolean, date-timeNoIf the value was ˈbackUpˈ, it would match anything that does not equal “backUp”, “backup”, or any other variation in casing. It also would match anything that does not contain the characters ‘backup’ in that order.
==Strictly equalsStringYesIf the value was ˈbackUpˈ, it would only match “backUp” and no other variation in casing.
!==Strictly does not equalStringYesIf the value was ˈbackUpˈ, it would match “backup”, “BACKup”, or anything except “backUp”, with that exact casing.
=~ContainsStringNoIf the value was ˈbackUpˈ, it would match anything that equals “backup”, “BACKUP”, “BackUp”, “backUp”, or any other variation in casing, or contains those characters in that order, alongside other characters.
>=Greater than or equal toInteger, rational, date-timeNot applicableFor a query where you have size >= 5 as the condition, all results have a value of 5 or greater in the field named size.
>Greater thanInteger, rational, date-timeNot applicableFor a query where you have size > 5 as the condition, all results have a value of greater than 5 in the field named size.
<=Less than or equal toInteger, rational, date-timeNot applicableFor a query where you have size <= 5 as the condition, all results have a value of 5 or less in the field named size.
<Less thanInteger, rational, date-timeNot applicableFor a query where you have size < 5 as the condition, all results have a value of 5 or less in the field named size.

Exemplos do que podemos fazer

Certo, agora já sabemos da existência dessa opção de consulta, vimos a sua sintaxe e também seus operados mas na realidade qual a vantagem de se usar essa opção comparada com apenas digitar o nome do recurso na barra de pesquisa?

Abaixo listo alguns exemplos interessantes.

Máquinas que foram criadas nos últimos dias

Ao trabalhar com data, podemos tanto passar a data inteira(seguindo o padrão que a oracle mostra na documentação), usar a variável now e por ultimo fazer operações em cima da string de data, as 3 consultas abaixo retornam a mesma coisa

query
  instance resources
  where timeCreated < 'now-24h'
query
  instance resources
  where timeCreated > '2021-01-27 00:00:00 UTC'
query
  instance resources
  where timeCreated > '2021-01-29 00:00:00 UTC -24h'

Aplicando diversas condições

Também podemos aplicar mais de uma condição em nossa consulta usando os peradores &&(and) e || (or), juntando tudo, podemos por exemplo consultar quais instâncias foram criadas no últimos 10 dias e possuem SQL no nome:

query
instance resources
where timeCreated >'now-10d' && displayName=~'SQL'

Podemos também juntar diversas condições, como por exemplo máquinas que foram criadas no últimos 10 dias e possuem SQL no nome ou máquinas que possuam SQL no nome, para isso precisamos agrupar as condições entre parênteses :

query
instance resources
where (timeCreated >'now-10d' && displayName=~'SQL') || displayName=~'SQL'

Outra funcionalidade que temos é a opção de procurar por mais de um tipo de recurso, aqui mostro como buscar instâncias e discos que possuam SQL no nome:

query
instance, bootVolume resources
where (timeCreated >'now-10d' && displayName=~'SQL') || displayName=~'SQL'

chevron_left
chevron_right