innerunique join
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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.
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
Conteúdo relacionado
- Saiba mais sobre outros tipos de junção