comando de junção - OpenSearch Serviço Amazon

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 comON. 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á especificar AND um OR 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