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.
Syntax
|
join
kind=innerunique
Tabela Esquerda [ Sugestões ] on
Tabela 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 ON ColumnName. 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
Conteúdo relacionado
- Saiba mais sobre outros tipos de associação
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários