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 mit
ON
. 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 einenOR
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