Befehl join - OpenSearch Amazon-Dienst

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Befehl join

Anmerkung

Informationen darüber, welche AWS Datenquellenintegrationen diesen PPL Befehl unterstützen, finden Sie unterBefehle.

Mit dem Befehl join können Sie Daten aus mehreren Quellen auf der Grundlage gemeinsamer Felder kombinieren, sodass Sie komplexe Analysen durchführen und tiefere Einblicke aus Ihren verteilten Datensätzen gewinnen können

Schema

Es gibt mindestens zwei Indizes, otel-v1-apm-span-* (groß) und otel-v1-apm-service-map (klein).

Relevante Felder aus Indizes:

otel-v1-apm-span-*
  • traceId - Eine eindeutige Kennung für eine Spur. Alle Spans aus derselben Spur haben dasselbe traceId gemeinsam.

  • spanId - Eine eindeutige Kennung für eine Span innerhalb einer Trace, die bei der Erstellung der Spanne zugewiesen wird.

  • parentSpanId - Der Bereich, spanId der diesem Bereich übergeordnet ist. Wenn es sich um einen Wurzelbereich handelt, muss dieses Feld leer sein.

  • durationInNanos - Der Unterschied in Nanosekunden zwischen startTime undendTime. (das ist latency in der Benutzeroberfläche)

  • serviceName - Die Ressource, aus der die Spanne stammt.

  • traceGroup - Der Name des Wurzelbereichs des Traces.

otel-v1-apm-service-map
  • serviceName - Der Name des Dienstes, der den Span ausgegeben hat.

  • destination.domain — Der Dienst, serviceName der von diesem Client aufgerufen wird.

  • destination.resource — Der Span-Name (API, Vorgang usw.), der von diesem Client aufgerufen wird.

  • target.domain — Der Dienst, der serviceName von einem Client aufgerufen wird.

  • target.resource — Der Span-Name (API, Vorgang usw.), der von einem Client aufgerufen wird.

  • traceGroupName — Der Span-Name der obersten Ebene, mit dem die Anforderungskette gestartet wurde.

Anforderung

Support join bei der Berechnung der folgenden Werte:

Kombinieren Sie für jeden Service den Span-Index mit dem Service Map-Index, um Metriken unter verschiedenen Filtertypen zu berechnen.

Diese Beispielabfrage berechnet die Latenz, wenn sie nach der Trace-Gruppe client_cancel_order für den order Service gefiltert wird.

SELECT avg(durationInNanos) FROM `otel-v1-apm-span-000001` t1 WHERE t1.serviceName = `order` AND ((t1.name in (SELECT target.resource FROM `otel-v1-apm-service-map` WHERE serviceName = `order` AND traceGroupName = `client_cancel_order`) AND t1.parentSpanId != NULL) OR (t1.parentSpanId = NULL AND t1.name = `client_cancel_order`)) AND t1.traceId in (SELECT traceId FROM `otel-v1-apm-span-000001` WHERE serviceName = `order`)
Migrieren zu PPL

Syntax des Join-Befehls

SEARCH source=<left-table> | <other piped command> | [joinType] JOIN [leftAlias] ON joinCriteria <right-table> | <other piped command>
Umschreiben

SEARCH source=otel-v1-apm-span-000001 | WHERE serviceName = 'order' | JOIN left=t1 right=t2 ON t1.traceId = t2.traceId AND t2.serviceName = 'order' otel-v1-apm-span-000001 -- self inner join | EVAL s_name = t1.name -- rename to avoid ambiguous | EVAL s_parentSpanId = t1.parentSpanId -- RENAME command would be better when it is supported | EVAL s_durationInNanos = t1.durationInNanos | FIELDS s_name, s_parentSpanId, s_durationInNanos -- reduce colunms in join | LEFT JOIN left=s1 right=t3 ON s_name = t3.target.resource AND t3.serviceName = 'order' AND t3.traceGroupName = 'client_cancel_order' otel-v1-apm-service-map | WHERE (s_parentSpanId IS NOT NULL OR (s_parentSpanId IS NULL AND s_name = 'client_cancel_order')) | STATS avg(s_durationInNanos) -- no need to add alias if there is no ambiguous
joinType
  • Syntax: INNER | LEFT OUTER | CROSS

  • Optional

  • Die Art der auszuführenden Verknüpfung. Die Standardeinstellung ist INNER wenn nicht angegeben.

leftAlias
  • Syntax: left = <leftAlias>

  • Optional

  • Der Alias der Unterabfrage, der für die linke Join-Seite verwendet werden soll, um mehrdeutige Benennungen zu vermeiden.

joinCriteria
  • Syntax: <expression>

  • Erforderlich

  • Die Syntax beginnt mitON. Es könnte ein beliebiger Vergleichsausdruck sein. Im Allgemeinen sehen die Verbindungskriterien wie folgt aus<leftAlias>.<leftField>=<rightAlias>.<rightField>.

    Beispiel: l.id = r.id. Wenn das Join-Kriterium mehrere Bedingungen enthält, können Sie zwischen jedem Vergleichsausdruck einen OR Operator angebenAND. Beispiel, l.id = r.id AND l.email = r.email AND (r.age > 65 OR r.age < 18).

Weitere Beispiele

Migration von der SQL Abfrage (TPC-H Q13):

SELECT c_count, COUNT(*) AS custdist FROM ( SELECT c_custkey, COUNT(o_orderkey) c_count FROM customer LEFT OUTER JOIN orders ON c_custkey = o_custkey AND o_comment NOT LIKE '%unusual%packages%' GROUP BY c_custkey ) AS c_orders GROUP BY c_count ORDER BY custdist DESC, c_count DESC;

Umgeschrieben von Join QueryPPL:

SEARCH source=customer | FIELDS c_custkey | LEFT OUTER JOIN ON c_custkey = o_custkey AND o_comment NOT LIKE '%unusual%packages%' orders | STATS count(o_orderkey) AS c_count BY c_custkey | STATS count() AS custdist BY c_count | SORT - custdist, - c_count

Einschränkung: Untersuchen werden in Join Right Side nicht unterstützt.

Wenn Teilsuchen unterstützt werden, können Sie die obige PPL Abfrage wie folgt umschreiben:

SEARCH source=customer | FIELDS c_custkey | LEFT OUTER JOIN ON c_custkey = o_custkey [ SEARCH source=orders | WHERE o_comment NOT LIKE '%unusual%packages%' | FIELDS o_orderkey, o_custkey ] | STATS count(o_orderkey) AS c_count BY c_custkey | STATS count() AS custdist BY c_count | SORT - custdist, - c_count