Share via


operador lookup

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

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

Aqui, o resultado é uma tabela que estende o FactTable ($left) com dados de DimensionTable (referenciado por $right) executando uma pesquisa de cada par (CommonColumn,Col) da tabela anterior com cada par (CommonColumn1,Col2) na última tabela. Para as diferenças entre tabelas de fatos e dimensões, consulte tabelas de fatos e dimensões.

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

  • O resultado não repete colunas da $right tabela que são a base para a operação de junção.
  • Há suporte apenas para dois tipos de pesquisa, leftouter 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(*))

Syntax

LeftTable|lookup [kind= (leftouter|inner)] (Condiçõesde RightTable)on

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Tipo Obrigatório 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 "popular" 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 aparecerão na saída com valores nulos usados para os valores ausentes das colunas RightTable adicionadas pelo operador . Se inner for usado, essas linhas serão omitidas da saída. Não há suporte para outros tipos de junção pelo lookup operador .

Regras

Tipo de regra Syntax Predicado
Igualdade por nome ColumnName whereLeftTable.ColumnName==RightTable.ColumnName
Igualdade por valor $left.LeftColumn==$right.RightColumn where$left.LeftColumn==$right.*Rightcolumn

Observação

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

Retornos

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) serão exibidos apenas uma vez na tabela de saída.
  • Se kind não for especificado ou kind=leftouter, além das correspondências internas, haverá uma linha para cada linha à esquerda (e/ou à direita), mesmo que ela não tenha nenhuma correspondência. Nesse caso, as células de saída sem correspondência contêm valores nulos.
  • Se kind=inner, haverá uma linha na saída para cada combinação de linhas correspondentes da esquerda e da direita.

Exemplos

let FactTable=datatable(Row:string,Personal:string,Family:string) [
  "1", "Bill",   "Gates",
  "2", "Bill",   "Clinton",
  "3", "Bill",   "Clinton",
  "4", "Steve",  "Ballmer",
  "5", "Tim",    "Cook"
];
let DimTable=datatable(Personal:string,Family:string,Alias:string) [
  "Bill",  "Gates",   "billg",
  "Bill",  "Clinton", "billc",
  "Steve", "Ballmer", "steveb",
  "Tim",   "Cook",    "timc"
];
FactTable
| lookup kind=leftouter DimTable on Personal, Family
Linha Pessoal Família Alias
1 Bill Portões billg
2 Bill Clinton billc
3 Bill Clinton billc
4 Steve Ballmer steveb
5 Tim Cozinhar timc