Com as mesclagens, você pode conectar vistas diferentes para explorar dados de mais de uma visualização ao mesmo tempo e ver como diferentes partes dos dados se relacionam.
Por exemplo, seu banco de dados pode incluir as tabelas order_items
, orders
e users
. Você pode usar mesclagens para explorar dados de todas as tabelas ao mesmo tempo. Nesta página, explicamos as junções no LookML, incluindo parâmetros de mesclagem e padrões de mesclagem específicos.
As mesclas começam com a guia Explorar
As junções são definidas no arquivo de modelo para estabelecer a relação entre uma exploração e uma visualização. As mesclagens conectam uma ou mais visualizações a uma única exploração, seja diretamente ou por outra visualização mesclada.
Considere duas tabelas de banco de dados: order_items
e orders
. Depois de gerar visualizações para as duas tabelas, declare uma ou mais delas no parâmetro explore
do arquivo de modelo:
explore: order_items { ... }
Quando você executa uma consulta no order_items
Explorar, o order_items
aparece na cláusula FROM
do SQL gerado:
SELECT ...
FROM order_items
Saiba mais em order_items
. Por exemplo, para adicionar dados sobre a order
de que o order_item
faz parte, faça algo como:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
}
O LookML acima realiza duas tarefas. Primeiro, você pode ver os campos de orders
e order_items
na IU:
Em segundo lugar, o LookML descreve como mesclar orders
e order_items
. O LookML seria convertido no seguinte SQL:
SELECT ...
FROM order_items
LEFT JOIN orders
ON order_items.order_id = orders.id
Esses parâmetros do LookML são descritos em mais detalhes nas seções a seguir. Consulte a página de referência do parâmetro join
para saber mais sobre como esse LookML é convertido em SQL.
Dica da equipe do Chat: os usuários perguntam mais sobre o erro de validação, que pode ser causado por uma mesclagem ausente. Consulte o artigo da Central de Ajuda sobre esse erro para ver mais informações.
Parâmetros de mesclagem
Quatro parâmetros principais são usados para mesclar: joins
, join
, type
, relationship
e sql_on
.
Etapa 1: começar a explorar
Primeiro, crie o order_items
Explore:
explore: order_items { ... }
Etapa 2: join
Para participar de uma tabela, primeiro é necessário declará-la em uma visualização. Neste exemplo, orders
é uma visualização existente do nosso modelo.
Em seguida, use o parâmetro join
para declarar que você quer mesclar a visualização orders
a order_items
:
explore: order_items {
join: orders { ... }
}
Etapa 3: type
Considere qual type
de mesclagem precisa ser realizada. O Looker oferece suporte a LEFT JOIN
, INNER JOIN
, FULL OUTER JOIN
e CROSS JOIN
. Eles correspondem aos valores de parâmetro type
de left_outer
, inner
, full_outer
e cross
.
explore: order_items {
join: orders {
type: left_outer
}
}
O valor padrão de type
é left_outer
e geralmente é o tipo de mesclagem mais usado.
Etapa 4: relationship
Defina uma mesclagem relationship
entre order_items
e orders
. Declarar corretamente o relationship
de uma mesclagem é importante para que o Looker calcule medidas precisas. A relação é definida da visualização order_items
para da visualização orders
. As opções possíveis são one_to_one
, many_to_one
, one_to_many
e many_to_many
.
Nesse exemplo, pode haver várias order_items
para um único order
. A relação de order_items
com orders
é many_to_one
:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
}
}
Se você não incluir um relationship
na mesclagem, o Looker usará many_to_one
por padrão.
Veja mais dicas sobre como definir o parâmetro relationship
corretamente para uma mesclagem no artigo Corrigir o parâmetro relationship
da Central de Ajuda.
Etapa 5: sql_on
Declare como mesclar essas duas tabelas com o parâmetro sql_on
ou foreign_key
. Normalmente sugerimos o sql_on
, já que ele pode fazer tudo o que o foreign_key
pode fazer, mas normalmente é mais fácil de entender.
sql_on
é equivalente à cláusula ON
no SQL gerado para uma consulta. Com esse parâmetro, podemos declarar quais campos serão correspondidos para realizar a mesclagem:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
}
Também é possível gravar mesclagens mais complexas. Por exemplo, talvez você queira mesclar somente pedidos com id
maior que 1.000:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} AND ${orders.id} > 1000 ;;
}
}
Confira os operadores de substituição para saber mais sobre a sintaxe ${ ... }
nesses exemplos.
Etapa 6: fazer testes
Para testar se essa mesclagem está funcionando como esperado, acesse a opção Explorar itens de pedido. Você verá os campos de order_items
e orders
.
Consulte Desenvolvimento de modelos para saber mais sobre como testar as alterações do LookML.
Como participar usando outra visualização
Você pode mesclar uma visualização a uma guia "Explorar" em outra visualização. No exemplo acima, você mesclava orders
com order_items
pelo campo order_id
. Também podemos mesclar os dados de uma visualização chamada users
para a exploração order_items
, mesmo que eles não compartilhem um campo comum. Para fazer isso, participe usando a visualização orders
.
Use sql_on
ou foreign_key
para mesclar users
com orders
em vez de order_items
. Faça isso definindo o escopo correto do campo de orders
como orders.user_id
.
Veja um exemplo com sql_on
:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
join: users {
type: left_outer
relationship: many_to_one
sql_on: ${orders.user_id} = ${users.id} ;;
}
}
Participar de uma visualização mais de uma vez
Uma visualização users
contém dados de compradores e vendedores. Para unir os dados dessa visualização ao order_items
, mas fazer isso separadamente para compradores e vendedores, é possível mesclar o users
duas vezes com nomes diferentes usando o parâmetro from
.
O parâmetro from
permite especificar qual visualização usar em uma mesclagem, além de dar um nome exclusivo à mesclagem. Exemplo:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
join: buyers {
from: users
type: left_outer
relationship: many_to_one
sql_on: ${orders.buyer_id} = ${buyers.id} ;;
}
join: sellers {
from: users
type: left_outer
relationship: many_to_one
sql_on: ${orders.seller_id} = ${sellers.id} ;;
}
}
Nesse caso, somente os dados do comprador são agregados como buyers
, enquanto apenas os dados do vendedor são agregados como sellers
.
Observação: a visualização users
agora precisa ser chamada pelos nomes com alias buyers
e sellers
na mesclagem.
Como limitar campos de uma mesclagem
O parâmetro fields
permite especificar quais campos são trazidos de uma mesclagem para um "Explorar". Por padrão, todos os campos de uma visualização são inseridos quando integrados. No entanto, talvez você queira exibir somente um subconjunto de campos.
Por exemplo, quando orders
é associado a order_items
, é possível trazer apenas os campos shipping
e tax
pela mesclagem:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
fields: [shipping, tax]
}
}
Também é possível referenciar um conjunto de campos, como [set_a*]
. Cada conjunto é definido em uma visualização usando o parâmetro set
. Suponha que você tenha o seguinte conjunto definido na visualização orders
:
set: orders_set {
fields: [created_date, shipping, tax]
}
Você pode escolher levar apenas esses três campos ao mesclar orders
com order_items
:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
fields: [orders_set*]
}
}
Agregadores simétricos
O Looker usa um recurso chamado "agregados simétricos" para calcular as agregações (como somas e médias) corretamente, mesmo quando as mesclas resultam em um fanout. Os agregamentos simétricos são descritos em mais detalhes no artigo Uma explicação simples dos dados agregados simétricos da Central de Ajuda, e o problema de fanout que eles resolvem é explicado no artigo O problema dos fanouts do SQL.
Chaves primárias obrigatórias
Para que as medidas (agregações) apareçam nas junções, você precisa definir as chaves primárias em todas as visualizações envolvidas na mesclagem.
Para isso, adicione o parâmetro primary_key
à definição do campo de chave primária em cada visualização:
dimension: id {
type: number
primary_key: yes
}
Para processar corretamente as medidas de junção, o Looker depende de você especificar uma chave primária em que os valores são valores totalmente exclusivos e não NULL. Caso seus dados não tenham uma chave primária, considere se a concatenação de vários campos resultaria em uma chave primária de valores completamente exclusivos e não NULL. Se a chave primária não for exclusiva ou tiver valores NULL e a consulta incluir dados que revelam esses problemas, o Looker retornará um erro conforme descrito neste artigo da Central de Ajuda.
Dialetos SQL compatíveis
Para que o Looker ofereça suporte a agregações simétricas no seu projeto do Looker, seu dialeto do banco de dados também precisará apoiá-los. A tabela a seguir mostra quais dialetos são compatíveis com agregações simétricas na versão mais recente do Looker:
Se o dialeto não for compatível com agregações simétricas, tenha cuidado ao executar mesclagens no Looker, já que alguns tipos de mesclagens podem resultar em agregações imprecisas (como somas e médias). Este problema e as soluções alternativas para ele são descritos em detalhes no artigo O problema de fanouts do SQL.
Saiba mais sobre mesclagens
Para saber mais sobre parâmetros de mesclagem no LookML, consulte a documentação de Referência de mesclagem.