Compartilhar via


operador lookup

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

Estende as colunas de uma tabela de fatos com valores pesquisados em uma tabela de dimensões.

Por exemplo, a consulta a seguir resulta em uma tabela que estende o FactTable ($left) com dados do DimensionTable ($right) executando uma pesquisa. A pesquisa corresponde a cada par (CommonColumn, Col1) de FactTable com cada par (CommonColumn, Col2) no DimensionTable. Para obter as diferenças entre tabelas de fatos e dimensões, consulte tabelas de fatos e dimensões.

FactTable | lookup kind=leftouter (DimensionTable) on CommonColumn, $left.Col1 == $right.Col2

O lookup operador executa uma operação semelhante ao operador de junção com as seguintes diferenças:

  • O resultado não repete $right colunas da tabela que são a base para a operação de junção.
  • Há suporte para leftouter apenas dois tipos de pesquisa e inner, sendo leftouter o padrão.
  • Em termos de desempenho, o sistema, por padrão, pressupõe que a $left tabela é a tabela maior (fatos) e a $right tabela é a tabela menor (dimensões). Isso é exatamente oposto à suposição usada pelo operador join.
  • O lookup operador transmite automaticamente a $right tabela para a $left tabela (essencialmente, se comporta como se tivesse hint.broadcast sido especificado). Isso limita o tamanho da $right tabela.

Observação

Se o lado direito da pesquisa for maior que várias dezenas de MBs, a consulta falhará.

Você pode executar a seguinte consulta para estimar o tamanho do lado direito em bytes:

rightSide
| summarize sum(estimate_data_size(*))

Sintaxe

lefttable [ ()] atributos dedeà direita

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Digitar Obrigatória Descrição
LeftTable string ✔️ A tabela ou expressão tabular que é a base para a pesquisa. Indicada como $left.
RightTable string ✔️ A tabela ou expressão tabular usada para "preencher" novas colunas na tabela de fatos. Indicada como $right.
Atributos string ✔️ Uma lista delimitada por vírgulas de uma ou mais regras que descrevem como as linhas de LeftTable são correspondidas às linhas de RightTable. Várias regras são avaliadas usando o operador lógico and. Confira Regras.
kind string Determina como tratar linhas em LeftTable que não têm correspondência em RightTable. Por padrão, leftouter é usado, o que significa que todas essas linhas aparecem na saída com valores nulos usados para os valores ausentes de colunas righttable adicionadas pelo operador. Se inner for usado, essas linhas serão omitidas da saída. Outros tipos de junção não são suportados pelo lookup operador.

Regras

Tipo de regra Sintaxe Predicado
Igualdade por nome ColumnName where LeftTable.ColumnName==RightTable.ColumnName
Igualdade por valor $left. LeftColumn==$right.RightColumn where $left. Coluna Esquerda==$right.*Coluna Direita

Observação

No caso de 'igualdade por valor', os nomes das colunas devem ser qualificados com a tabela de proprietários aplicável indicada por $left e $right notações.

Devoluções

Uma tabela com:

  • Uma coluna para cada coluna em cada uma das duas tabelas, incluindo as chaves correspondentes. As colunas do lado direito serão renomeada automaticamente se houver conflitos de nome.
  • Uma linha para cada correspondência entre as tabelas de entrada. Uma correspondência é uma linha selecionada de uma tabela que tem o mesmo valor para todos os campos on que uma linha da outra tabela.
  • Os atributos (chaves de pesquisa) aparecem apenas uma vez na tabela de saída.
  • Se kind não for especificado ou kind=leftouter, além das correspondências internas, há uma linha para cada linha à esquerda (e/ou direita), mesmo que não tenha correspondência. Nesse caso, as células de saída sem correspondência contêm valores nulos.
  • Se kind=inner, então há uma linha na saída para cada combinação de linhas correspondentes da esquerda e da direita.

Exemplos

O exemplo a seguir mostra como executar uma junção externa esquerda entre o FactTable e DimTable, com base em valores correspondentes nas colunas Personal e Family.

let FactTable=datatable(Row:string,Personal:string,Family:string) [
  "1", "Rowan",   "Murphy",
  "2", "Ellis",   "Turner",
  "3", "Ellis",   "Turner",
  "4", "Maya",  "Robinson",
  "5", "Quinn",    "Campbell"
];
let DimTable=datatable(Personal:string,Family:string,Alias:string) [
  "Rowan",  "Murphy",   "rowanm",
  "Ellis",  "Turner", "ellist",
  "Maya", "Robinson", "mayar",
  "Quinn",   "Campbell",    "quinnc"
];
FactTable
| lookup kind=leftouter DimTable on Personal, Family

de saída

Linha Pessoal Família Alias
1 Rowan Murphy rowanm
2 Ellis Torneiro ellist
3 Ellis Torneiro ellist
4 Maia Robinson maiáss de maio
5 Quinn Campbell quinnc
  • de junção de transmissão
  • de junção de canhoto
  • junção interna
  • operador de junção