Ana içeriğe geç

SQL Arama

Observability, SQL arama özelliğini sağlar. Bu özellik kullanıcıların SQL sorguları kullanarak Observability dizinlerini aramasına olanak tanır. Observability'yi aramak için, normal SQL sorguları kullanmak yerine, loglarınızdaki alan adlarını ve dizin adlarını belirtmeniz gerekir. Geleneksel SQL'de bu "SELECT column_name FROM table_name" olurken, Observability'de "SELECT field_name FROM index_name" olur. Yani, Observability'yi sorguladığınızda, loglarınızdaki alan adlarını ve dizin adlarını kullanarak arama yaparsınız.

Temel SQL Sorguları

Uyarı
  • Aşağıdaki tüm çıktılar kullanıcıyı bilgilendirme amaçlı örneklerden oluşmaktadır.

Verileri aramak ve toplamak için SELECT ifadesini FROM, WHERE, GROUP BY, HAVING, ORDER BY ve LIMIT ifadeleriyle birlikte kullanın.

SELECT * FROM  ``sample-index1`

Döndürülen cevapta, 'şema' olarak adlandırılan kısımlar alanları, yani sütunları temsil eder. 'Datarow', bu alanlara karşılık gelen değerlerdir:

  • şema: Tüm alanlar için alanı ve türleri belirtir.
  • data_rows: Bir sonuç dizisi. Her sonuç eşleşen bir satırı (belgeyi) temsil eder.
  • total: Dizindeki toplam satır (belge) sayısı.
  • size: Tek bir yanıtta döndürülecek sonuç sayısı.
  • status: Sorguyu çalıştırdıktan sonra Observability'nin döndürdüğü HTTP yanıt durumu.

Syntax

Verileri arama ve toplama için tam sözdizimi aşağıdaki gibidir:

SELECT [DISTINCT] (* | expression) [[AS] alias] [, ...]
FROM index_name
[WHERE predicates]
[GROUP BY expression [, ...]
[HAVING predicates]]
[ORDER BY expression [IS [NOT] NULL] [ASC | DESC] [, ...]]
[LIMIT [offset, ] size]

Karmaşık Sorgular

Basit SFW (SELECT-FROM-WHERE) sorgularının yanı sıra, SQL eklentisi alt sorgu, birleştirme, birleştirme ve eksi gibi karmaşık sorguları da destekler.

SELECT * FROM sample-index1 WHERE age > 30 AND gender = 'M' ORDER BY balance DESC

Joins

Observability SQL inner joins, cross joins, and left outer join'leri destekler.

Join'lerin bir dizi kısıtlaması vardır:

  1. Yalnızca iki dizini birleştirebilirsiniz.

  2. Dizinler için veri klasörleri kullanmalısınız (örneğin, people p)..

  3. Bir ON ifadesi içinde yalnızca AND koşullarını kullanabilirsiniz.

  4. Bir WHERE ifadesinde, birden fazla dizin içeren ağaçları birleştirmeyin. Örneğin, aşağıdaki ifade işe yarar:

    WHERE (a.type1 > 3 OR a.type1 < 0) AND (b.type2 > 4 OR b.type2 < -1)

    Aşağıdaki ifade şunu ifade etmez:

    WHERE (a.type1 > 3 OR b.type2 < 0) AND (a.type1 > 4 OR b.type2 < -1)
  5. Sonuçlar için GROUP BY veya ORDER BY kullanamazsınız.

  6. LIMIT ile OFFSET (örn. LIMIT 25 OFFSET 25) desteklenmiyor.

Örnek: Inner Join

Inner Join, birleştirme öngörülerinize göre iki dizinin sütunlarını birleştirerek yeni bir sonuç kümesi oluşturur. İki dizini yineler ve birleştirme öngörülerini karşılayanları bulmak için her belgeyi karşılaştırır. İsteğe bağlı olarak JOIN ifadesinden önce bir INNER anahtar sözcüğü kullanabilirsiniz.

SQL Sorgu:

SELECT
a.account_number, a.firstname, a.lastname,
e.id, e.name
FROM accounts a
JOIN employees_nested e
ON a.account_number = e.id

Örnek: Cross Join

Cross Join, çapraz birleştirme olarak da bilinir, ilk dizindeki her belgeyi ikinci dizindeki her belgeyle birleştirir. Sonuç kümesi, her iki dizinin belgelerinin kartezyen çarpımıdır. Bu işlem, birleştirme koşulunu belirten ON maddesi olmadan iç birleştirmeye benzer.

SQL Sorgu:

SELECT
a.account_number, a.firstname, a.lastname,
e.id, e.name
FROM accounts a
JOIN employees_nested e

Örnek: Left Outer Join

Birleştirme koşulunu karşılamıyorsa ilk dizinden gelen satırları tutmak için Left Outer Join kullanın. OUTER anahtar sözcüğü isteğe bağlıdır.

SQL Sorgu:

SELECT
a.account_number, a.firstname, a.lastname,
e.id, e.name
FROM accounts a
LEFT JOIN employees_nested e
ON a.account_number = e.id

Alt Sorgular

Bir alt sorgu, başka bir ifadenin içinde kullanılan ve parantez içinde gösterilen tam bir SELECT ifadesidir. explain çıktısından, bazı alt sorguların aslında yürütülecek eşdeğer bir birleştirme sorgusuna dönüştürüldüğünü görebilirsiniz.

Örnek:

 "SELECT a1.firstname, a1.lastname, a1.balance
FROM accounts a1
WHERE a1.account_number IN (
SELECT a2.account_number
FROM accounts a2
WHERE a2.balance > 10000)"

Örnek:

 "SELECT a.f, a.l, a.a
FROM (
SELECT firstname AS f, lastname AS l, age AS a
FROM accounts
WHERE age > 30
) AS a"

Eşleşme Sorgusu

matchquery veya match_query kullanmak için arama sorgunuzu ve arama yapmak istediğiniz alan adını girin:

SELECT account_number, address FROM sample-index1 WHERE MATCHQUERY(address, 'Holmes') AND age > 30