As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
comando de junção
nota
Para ver quais integrações AWS de fontes de dados oferecem suporte a esse PPL comando, consulteComandos.
O comando join permite combinar dados de várias fontes com base em campos comuns, permitindo que você realize análises complexas e obtenha insights mais profundos de seus conjuntos de dados distribuídos
Schema
Existem pelo menos dois índices, otel-v1-apm-span-*
(grande) e otel-v1-apm-service-map
(pequeno).
Campos relevantes dos índices:
otel-v1-apm-span-*
-
traceId - Um identificador exclusivo para um rastreamento. Todos os intervalos do mesmo traço compartilham o mesmotraceId.
-
spanId - Um identificador exclusivo para uma extensão dentro de um rastreamento, atribuído quando a extensão é criada.
-
parentSpanId - O spanId período principal desse período. Se for uma extensão raiz, esse campo deverá estar vazio.
-
durationInNanos - A diferença em nanossegundos entre startTime e. endTime (isso está
latency
na interface do usuário) -
serviceName - O recurso do qual a extensão se origina.
-
traceGroup - O nome da extensão raiz do traço.
otel-v1-apm-service-map
-
serviceName - O nome do serviço que emitiu o intervalo.
-
destination.domain - O serviceName do serviço que está sendo chamado por esse cliente.
-
destination.resource - O nome do intervalo (API, operação etc.) que está sendo chamado por esse cliente.
-
target.domain - O serviceName do serviço que está sendo chamado por um cliente.
-
target.resource - O nome do intervalo (API, operação etc.) que está sendo chamado por um cliente.
-
traceGroupName - O nome do intervalo de nível superior que iniciou a cadeia de solicitações.
Requisito
Support join para calcular o seguinte:
Para cada serviço, junte o índice de amplitude no índice do mapa de serviços para calcular métricas em diferentes tipos de filtros.
Esse exemplo de consulta calcula a latência quando filtrada por grupo de rastreamento client_cancel_order
para o serviço. order
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`)
Migração para o PPL
Sintaxe do comando join
SEARCH source=<left-table> | <other piped command> | [joinType] JOIN [leftAlias] ON joinCriteria <right-table> | <other piped command>
Reescrevendo
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
-
Sintaxe:
INNER | LEFT OUTER | CROSS
-
Opcional
-
O tipo de junção a ser realizada. O padrão é
INNER
se não for especificado.
leftAlias
-
Sintaxe:
left = <leftAlias>
-
Opcional
-
O alias da subconsulta a ser usado com o lado esquerdo da junção, para evitar nomenclaturas ambíguas.
joinCriteria
-
Sintaxe:
<expression>
-
Obrigatório
-
A sintaxe começa com
ON
. Pode ser qualquer expressão de comparação. Geralmente, os critérios de junção parecem assim<leftAlias>.<leftField>=<rightAlias>.<rightField>
.Por exemplo:
l.id = r.id
. Se os critérios de junção contiverem várias condições, você poderá especificarAND
umOR
operador entre cada expressão de comparação. Por exemplo,l.id = r.id AND l.email = r.email AND (r.age > 65 OR r.age < 18)
.
Mais exemplos de
Migração da SQL consulta (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;
Reescrito por consulta de PPL junção:
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
Limitação: subpesquisas não são suportadas na junção do lado direito.
Se houver suporte para subpesquisas, você poderá reescrever a PPL consulta acima da seguinte forma:
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