Partilhar via


innerunique junte-se

Aplica-se a: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

O sabor de junção innerunique remove teclas duplicadas do lado esquerdo. Esse comportamento garante que a saída contenha uma linha para cada combinação de teclas exclusivas esquerda e direita.

Por padrão, o sabor de junção innerunique é usado se o parâmetro kind não for especificado. Essa implementação padrão é útil em cenários de análise de log/rastreamento, onde você pretende correlacionar dois eventos com base em uma ID de correlação compartilhada. Ele permite que você recupere todas as instâncias do fenômeno, desconsiderando registros de rastreamento duplicados que contribuem para a correlação.

Diagrama que mostra como a junção funciona.

Sintaxe

LeftTable|joinkind=innerunique [ Dicas ] RightTableonCondições

Saiba mais sobre convenções de sintaxe.

Parâmetros

Designação Tipo Necessário Descrição
LeftTable string ✔️ A tabela esquerda ou expressão tabular, às vezes chamada de tabela externa, cujas linhas devem ser mescladas. Denotado como $left.
Dicas string Zero ou mais dicas de junção separadas por espaço na forma de Nome=Valor que controlam o comportamento da operação de correspondência de linhas e do plano de execução. Para obter mais informações, consulte Dicas.
RightTable string ✔️ A tabela direita ou expressão tabular, às vezes chamada de tabela interna, cujas linhas devem ser mescladas. Denotado como $right.
Condições string ✔️ Determina como as linhas de LeftTable são correspondidas com as linhas de RightTable. Se as colunas que você deseja corresponder tiverem o mesmo nome em ambas as tabelas, use a sintaxe ONColumnName. Caso contrário, use a sintaxe ON $left.LeftColumn==$right.RightColumn. Para especificar várias condições, você pode usar a palavra-chave "e" ou separá-las com vírgulas. Se você usar vírgulas, as condições serão avaliadas usando o operador lógico "e".

Dica

Para obter o melhor desempenho, se uma mesa for sempre menor que a outra, use-a como o lado esquerdo da junção.

Dicas

Nome dos parâmetros Valores Descrição
hint.remote auto, left, local, right Consulte de ingresso entre clusters
hint.strategy=broadcast Especifica a maneira de compartilhar a carga de consulta em nós de cluster. Veja transmissão participar
hint.shufflekey=<key> A consulta shufflekey compartilha a carga de consulta em nós de cluster, usando uma chave para particionar dados. Consulte consulta aleatória
hint.strategy=shuffle A consulta de estratégia shuffle compartilha a carga de consulta em nós de cluster, onde cada nó processa uma partição dos dados. Consulte consulta aleatória

Devoluções

Esquema: Todas as colunas de ambas as tabelas, incluindo as teclas correspondentes.
Linhas: Todas as linhas desduplicadas da tabela esquerda que correspondem às linhas da tabela direita.

Exemplos

Reveja os exemplos e execute-os na página de consulta do Data Explorer.

Use a junção innerunique padrão

A consulta de exemplo combina linhas das tabelas X e Y onde as teclas coincidem, mostrando apenas as linhas que existem em ambas as tabelas

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

Output

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

Observação

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

A consulta executou a junção padrão, que é uma junção interna depois de desduplicar o lado esquerdo com base na chave de junção. A desduplicação mantém apenas o primeiro registo. O lado esquerdo resultante da junção após a desduplicação é:

Chave Valor1
um 1
b 2
c 4

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

Observação

O sabor innerunique junção pode produzir duas saídas possíveis e ambas estão corretas. Na primeira saída, o operador de junção selecionou aleatoriamente a primeira chave que aparece em t1, com o valor "val1.1" e combinou-a com as chaves t2. Na segunda saída, o operador de junção selecionou aleatoriamente a segunda chave que aparece em t1, com o valor "val1.2" e combinou-a com as 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

Output

chave 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

Output

chave valor Chave1 valor1
1 val1,2 1 val1,3
1 val1,2 1 val1,4
  • Kusto é otimizado para empurrar filtros que vêm após o join, para o lado de junção apropriado, esquerda ou direita, quando possível.
  • Às vezes, o sabor usado é interno e o filtro é propagado para o lado esquerdo da junção. O sabor é propagado automaticamente e as chaves que se aplicam a esse filtro aparecem na saída.
  • Use o exemplo anterior e adicione um filtro where value == "val1.2" . Ele 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"

Output

chave valor Chave1 valor1
1 val1,2 1 val1,3
1 val1,2 1 val1,4

Obtenha atividades de início de sessão alargadas

Obtenha atividades estendidas a partir de um 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