operador lookup
Estende as colunas de uma tabela de fatos com valores pesquisados em uma tabela de dimensão.
FactTable | lookup kind=leftouter (DimensionTable) on CommonColumn, $left.Col1 == $right.Col2
Aqui, o resultado é uma tabela que estende o FactTable
($left
) com dados de (referenciado DimensionTable
por $right
) realizando uma pesquisa de cada par (CommonColumn
,Col
) da primeira tabela 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 de junção com as seguintes diferenças:
- O resultado não repete colunas
$right
da tabela que são a base para a operação de junção. - Apenas dois tipos de pesquisa são suportados,
leftouter
einner
, comleftouter
sendo o padrão. - Em termos de desempenho, o sistema por padrão assume que a
$left
tabela é a tabela maior (fatos) e a$right
tabela é a tabela menor (dimensões). Isso é exatamente oposto à suposição usada pelo operadorjoin
. - O
lookup
operador transmite automaticamente a$right
tabela para a$left
mesa (essencialmente, comporta-se como sehint.broadcast
fosse 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 |
lookup
[kind
=
(leftouter
|inner
)] (
Condições da RightTable)
on
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 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. Outros tipos de associação não são suportados lookup pelo operador. |
Regras
Tipo de regra | Syntax | Predicado |
---|---|---|
Igualdade por nome | ColumnName | where LeftTable.ColumnName == RightTable.ColumnName |
Igualdade por valor | $left. LeftColumn == $right. RightColumn |
where $left. Coluna da Esquerda == $right. *Coluna da Direita |
Observação
No caso de "igualdade por valor", os nomes das colunas devem 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 chaves correspondentes. As colunas do lado direito serão automaticamente renomeadas 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) aparecerão apenas uma vez na tabela de saída.
- Se
kind
não for especificado oukind=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
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 | Bailarino | Steveb |
5 | Pedro | Cozinhar | TIMC |
Conteúdo relacionado
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de