Compartilhar via


innerunique join

Aplica-se a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

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

Por padrão, o innerunique tipo de junção será usado se o kind parâmetro não for especificado. Essa implementação padrão é útil em cenários de análise de log/rastreamento, em que 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 funciona a junção.

Sintaxe

LeftTable | join kind=innerunique [ Dicas ] Condições RightTable on

Saiba mais sobre as convenções de sintaxe.

Parâmetros

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

Dica

Para ter o melhor desempenho, se uma tabela sempre for menor do 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 Confira Junção entre clusters
hint.strategy=broadcast Especifica como compartilhar a carga de consulta em nós de cluster. Confira a junção de transmissão
hint.shufflekey=<key> A consulta shufflekey compartilha a carga de consulta em nós de cluster usando uma chave para particionar dados. Confira a consulta aleatória
hint.strategy=shuffle A consulta de estratégia shuffle compartilha a carga de consulta em nós de cluster, em que cada nó processará uma partição dos dados. Confira a 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 duplicação da tabela à esquerda que correspondem às linhas da tabela à direita.

Exemplos

Usar a junção innerunique padrão

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 Value1 Key1 Value2
b 2 b 10
c 4 c 20
c 4 c 30

Observação

As chaves "a" e "d" não aparecem na saída, pois não havia chaves correspondentes em ambos os lados, esquerdo e direito.

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

Chave Value1
um 1
b 2
c 4

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

Observação

O innerunique tipo de 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 a correspondeu 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 a correspondeu 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

Saída

chave value key1 value1
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

chave value key1 value1
1 val1.2 1 val1.3
1 val1.2 1 val1.4
  • O Azure Data Explorer é otimizado para efetuar push dos filtros após join em direção ao lado correto da junção, esquerdo ou direito, quando possível.
  • Às vezes, o tipo usado é innerunique 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 fornece o segundo resultado e nunca fornecerá 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

chave value key1 value1
1 val1.2 1 val1.3
1 val1.2 1 val1.4

Obter atividades de entrada estendida

Obtenha atividades estendidas de um login em que algumas entradas marcam 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