operador lookup

Expande as colunas de uma tabela de factos com valores pesquisados numa tabela de dimensões.

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

Aqui, o resultado é uma tabela que expande o FactTable ($left) com dados de DimensionTable (referenciados por $right) ao efetuar 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 factos e dimensões, veja tabelas de factos e dimensões.

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

  • O resultado não repete colunas da $right tabela que são a base para a operação de associação.
  • Apenas são suportados leftouter dois tipos de pesquisa e inner, sendo leftouter a predefinição.
  • Em termos de desempenho, o sistema, por predefinição, pressupõe que a $left tabela é a tabela maior (factos) e a $right tabela é a tabela mais pequena (dimensões). Isto é exatamente oposto ao pressuposto utilizado pelo join operador.
  • O lookup operador transmite automaticamente a $right tabela para a $left tabela (essencialmente, comporta-se como se hint.broadcast fosse especificado). Isto limita o tamanho da $right tabela.

Nota

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

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)] (RightTable)on Conditions

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Tipo Necessário Descrição
LeftTable string ✔️ A tabela ou expressão tabular que é a base para a pesquisa. Indicado como $left.
Tabela Direita string ✔️ A tabela ou expressão tabular que é utilizada para "preencher" novas colunas na tabela de factos. Indicado 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 a linhas da Tabela Direita. Várias regras são avaliadas com o and operador lógico. Veja Regras.
kind string Determina como tratar linhas na Tabela Esquerda que não têm correspondência na Tabela Direita. Por predefinição, leftouter é utilizado, o que significa que todas essas linhas serão apresentadas na saída com valores nulos utilizados para os valores em falta das colunas RightTable adicionadas pelo operador. Se inner for utilizado, essas linhas são omitidas do resultado. Os outros tipos de associação não são suportados pelo lookup operador.

Regras

Tipo de regra Syntax Predicar
Igualdade por nome ColumnName whereLeftTable. ColumnName==Tabela Direita. ColumnName
Igualdade por valor $left.LeftColumn==$right.Coluna Direita where$left.LeftColumn==$right.*RightColumn

Nota

Em caso de "igualdade por valor", os nomes das colunas têm de ser qualificados com a tabela de proprietário 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 teclas correspondentes. As colunas do lado direito serão automaticamente renomeadas se existirem conflitos de nomes.
  • 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 on campos que uma linha na outra tabela.
  • Os Atributos (chaves de pesquisa) só serão apresentados uma vez na tabela de saída.
  • Se kind não for especificado ou kind=leftouter, além das correspondências internas, existe uma linha para cada linha à esquerda (e/ou direita), mesmo que não tenha correspondência. Nesse caso, as células de saída não correspondentes contêm nulos.
  • Se kind=inner, existe 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 Fatura Portões faturação
2 Fatura Clinton billc
3 Fatura Clinton billc
4 Steve Ballmer steveb
5 Tim Cozinhar timc