Partilhar via


associação innerunique

O innerunique sabor da associação remove as teclas duplicadas do lado esquerdo. Este comportamento garante que o resultado contém uma linha para cada combinação de teclas esquerda e direita exclusivas.

Por predefinição, o sabor da innerunique associação é utilizado se o kind parâmetro não for especificado. Esta implementação predefinida é útil em cenários de análise de registo/rastreio, onde pretende correlacionar dois eventos com base num ID de correlação partilhado. Permite-lhe obter todas as instâncias do fenómeno ao ignorar registos de rastreio duplicados que contribuem para a correlação.

Diagrama que mostra como funciona a associação.

Syntax

|joinkind=inneruniqueTabela Esquerda [ Sugestões ] onTabela DireitaCondições

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Tipo Necessário Descrição
Tabela Esquerda string ✔️ A tabela esquerda ou expressão tabular, por vezes denominada tabela externa, cujas linhas devem ser intercaladas. Denotado como $left.
Sugestões string Zero ou mais sugestões de associação separadas por espaço sob a forma deValor de Nome= que controlam o comportamento da operação de correspondência de linhas e do plano de execução. Para obter mais informações, veja Sugestões.
Tabela Direita string ✔️ A tabela à direita ou expressão tabular, por vezes denominada tabela interna, cujas linhas devem ser intercaladas. Denotado como $right.
Condições string ✔️ Determina a forma como as linhas de LeftTable são correspondidas com linhas de RightTable. Se as colunas que pretende corresponder tiverem o mesmo nome em ambas as tabelas, utilize a sintaxe ONColumnName. Caso contrário, utilize a sintaxe ON $left.LeftColumn==$right.RightColumn. Para especificar várias condições, pode utilizar a palavra-chave "e" ou separá-las com vírgulas. Se utilizar vírgulas, as condições são avaliadas com o operador lógico "e".

Dica

Para um melhor desempenho, se uma tabela for sempre mais pequena do que a outra, utilize-a como o lado esquerdo da associação.

Sugestões

Nome dos parâmetros Valores Descrição
hint.remote auto, left, local, right Veja Associação Entre Clusters
hint.strategy=broadcast Especifica a forma de partilhar a carga de consulta em nós de cluster. Ver a associação de difusão
hint.shufflekey=<key> A shufflekey consulta partilha o carregamento da consulta em nós de cluster, utilizando uma chave para particionar dados. Ver consulta aleatória
hint.strategy=shuffle A shuffle consulta de estratégia partilha a carga de consulta em nós de cluster, onde cada nó processa uma partição dos dados. Ver consulta aleatória

Devoluções

Esquema: todas as colunas de ambas as tabelas, incluindo as chaves correspondentes.
Linhas: todas as linhas com eliminação de duplicados da tabela esquerda que correspondem às linhas da tabela à direita.

Exemplos

Utilizar a associação innerunique predefinida

let X = datatable(Key:string, Value1:long)
[
    'a',1,
    'b',2,
    'b',3,
    'c',4
];
let Y = datatable(Key:string, Value2:long)
[
    'b',10,
    'c',20,
    'c',30,
    'd',40
];
X | join Y on Key

Saída

Chave Valor1 Chave1 Valor2
b 2 b 10
c 4 c 20
c 4 c 30

Nota

As teclas "a" e "d" não aparecem na saída, uma vez que não existem teclas correspondentes nos lados esquerdo e direito.

A consulta executou a associação predefinida, que é uma associação interna depois de desdulicar o lado esquerdo com base na chave de associação. A eliminação de duplicados mantém apenas o primeiro registo. O lado esquerdo resultante da associação após a eliminação de duplicados é:

Chave Valor1
um 1
b 2
c 4

Duas saídas possíveis da associação innerunique

Nota

O innerunique sabor da associação pode produzir duas saídas possíveis e ambas estão corretas. No primeiro resultado, o operador de associação selecionou aleatoriamente a primeira chave que aparece em t1, com o valor "val1.1" e combinou-a com chaves t2. Na segunda saída, o operador de associação selecionou aleatoriamente a segunda chave que aparece em t1, com o valor "val1.2" e combinou-a com chaves t2.

let t1 = datatable(key: long, value: string)  
    [
    1, "val1.1",  
    1, "val1.2"  
];
let t2 = datatable(key: long, value: string)  
    [  
    1, "val1.3",
    1, "val1.4"  
];
t1
| join kind = innerunique
    t2
    on key

Saída

key valor chave1 valor1
1 val1.1 1 val1.3
1 val1.1 1 val1.4
let t1 = datatable(key: long, value: string)  
    [
    1, "val1.1",  
    1, "val1.2"  
];
let t2 = datatable(key: long, value: string)  
    [  
    1, "val1.3", 
    1, "val1.4"  
];
t1
| join kind = innerunique
    t2
    on key

Saída

key valor chave1 valor1
1 val1.2 1 val1.3
1 val1.2 1 val1.4
  • O Kusto está otimizado para emitir filtros que vêm a seguir a join, para o lado de associação adequado, à esquerda ou à direita, sempre que possível.
  • Por vezes, o sabor utilizado é innerunique e o filtro é propagado para o lado esquerdo da associação. O sabor é propagado automaticamente e as chaves que se aplicam a esse filtro aparecem na saída.
  • Utilize o exemplo anterior e adicione um filtro where value == "val1.2" . Dá o segundo resultado e nunca dará o primeiro resultado para os conjuntos de dados:
let t1 = datatable(key: long, value: string)  
    [
    1, "val1.1",  
    1, "val1.2"  
];
let t2 = datatable(key: long, value: string)  
    [  
    1, "val1.3", 
    1, "val1.4"  
];
t1
| join kind = innerunique
    t2
    on key
| where value == "val1.2"

Saída

key valor chave1 valor1
1 val1.2 1 val1.3
1 val1.2 1 val1.4

Obter atividades de início de sessão alargado

Obtenha atividades expandidas a partir de uma login que algumas entradas marcam como o início e o fim de uma atividade.

let Events = MyLogTable | where type=="Event" ;
Events
| where Name == "Start"
| project Name, City, ActivityId, StartTime=timestamp
| join (Events
    | where Name == "Stop"
        | project StopTime=timestamp, ActivityId)
    on ActivityId
| project City, ActivityId, StartTime, StopTime, Duration = StopTime - StartTime
let Events = MyLogTable | where type=="Event" ;
Events
| where Name == "Start"
| project Name, City, ActivityIdLeft = ActivityId, StartTime=timestamp
| join (Events
        | where Name == "Stop"
        | project StopTime=timestamp, ActivityIdRight = ActivityId)
    on $left.ActivityIdLeft == $right.ActivityIdRight
| project City, ActivityId, StartTime, StopTime, Duration = StopTime - StartTime