As mesclagens permitem conectar diferentes vistas para que você possa explorar dados de mais de uma visualização ao mesmo tempo e ver como diferentes partes dos dados se relacionam entre si.
Por exemplo, seu banco de dados pode incluir as tabelas order_items
, orders
e users
. É possível usar as mesclagens para analisar os dados de todas as tabelas ao mesmo tempo. Esta página explica as mesclagens no LookML, incluindo parâmetros e padrões de mesclagem específicos.
As mesclagens começam com uma Análise
As junções são definidas no arquivo de modelo para estabelecer a relação entre uma Análise e uma visualização. As mesclagens conectam uma ou mais visualizações a uma única Análise, 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
no arquivo de modelo:
explore: order_items { ... }
Quando você executa uma consulta da Análise order_items
, order_items
aparece na cláusula FROM
do SQL gerado:
SELECT ...
FROM order_items
Você pode incluir outras informações na Análise detalhada order_items
. Por exemplo, use o seguinte exemplo de LookML para unir a visualização orders
à análise detalhada order_items
:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
}
O LookML mostrado anteriormente faz duas coisas. Primeiro, é possível conferir os campos de orders
e order_items
no Seletor de campo da ferramenta Analisar:
Em segundo lugar, o LookML descreve como unir orders
e order_items
. Esse LookML seria traduzido para o 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.
Parâmetros de junção
Quatro parâmetros principais são usados para mesclar: join
, type
, relationship
e sql_on
.
Etapa 1: iniciar a Análise
Primeiro, crie a seção "Analisar" da order_items
:
explore: order_items { ... }
Etapa 2: join
Para mesclar uma tabela, é preciso primeiro declarar a tabela em uma visualização. Neste exemplo, suponha que orders
seja uma visualização existente no modelo.
Em seguida, use o parâmetro join
para declarar que você quer unir a visualização orders
à Análise order_items
:
explore: order_items {
join: orders { ... }
}
Etapa 3: type
Considere que tipo de junção realizar. O Looker oferece suporte a LEFT JOIN
, INNER JOIN
, FULL OUTER JOIN
e CROSS JOIN
. Eles correspondem aos valores do 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
.
Etapa 4: relationship
Defina uma relação de mesclagem entre a análise detalhada order_items
e a visualização orders
. Declarar corretamente a relação de uma mesclagem é importante para o Looker calcular medidas precisas. A relação é definida na Análise order_items
com a visualização orders
. As opções possíveis são one_to_one
, many_to_one
, one_to_many
e many_to_many
.
Neste exemplo, pode haver muitos itens para um único pedido. A relação entre a Análise order_items
e a visualização orders
é many_to_one
:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
}
}
Se você não incluir um parâmetro relationship
na mesclagem, o Looker usará many_to_one
como padrão.
Para mais dicas sobre como definir o parâmetro relationship
corretamente para uma mesclagem, consulte Como usar o parâmetro relationship
corretamente.
Etapa 5: sql_on
Declare como unir as tabelas order_items
e orders
com o parâmetro sql_on
ou foreign_key
.
O parâmetro sql_on
é equivalente à cláusula ON
no SQL gerado para uma consulta. Com esse parâmetro, você pode declarar quais campos devem ter correspondência para realizar a junção:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
}
Também é possível escrever mesclagens mais complexas. Por exemplo, você pode mesclar apenas 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 ;;
}
}
Consulte a documentação de operadores de substituição para saber mais sobre a sintaxe ${ ... }
nesses exemplos.
Etapa 6: teste
Para testar se essa mesclagem está funcionando como esperado, acesse a Análise Order Items. Você verá os campos de order_items
e orders
.
Consulte Como testar os campos em uma Análise para saber mais sobre como testar as mudanças do LookML em uma Análise.
Como participar usando outra visualização
Você pode participar de uma visualização em uma Análise usando outra visualização. No exemplo de parâmetros de mesclagem, você uniu orders
a order_items
usando o campo order_id
. Também podemos mesclar os dados de uma visualização chamada users
à Análise order_items
, mesmo que eles não compartilhem um campo em comum. Para isso, participe pela visualização orders
.
Use o parâmetro sql_on
ou foreign_key
para unir a visualização users
à visualização orders
, e não à Análise order_items
. Para isso, defina o escopo correto do campo de orders
como orders.user_id
.
Veja um exemplo que usa o parâmetro 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 vista da propriedade users
contém dados para compradores e vendedores. Para juntar os dados dessa visualização ao order_items
, mas fazer isso separadamente para compradores e vendedores, você pode agrupar 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 atribuir 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 referenciada pelos nomes com alias buyers
e sellers
na mesclagem.
Como limitar campos em uma mesclagem
O parâmetro fields
permite especificar quais campos são trazidos de uma mesclagem para uma Análise. Por padrão, todos os campos de uma visualização são trazidos quando são mesclados. No entanto, talvez você queira trazer apenas um subconjunto de campos.
Por exemplo, quando orders
é associado a order_items
, convém 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]
}
}
Você também pode 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 trazer apenas estes três campos ao unir orders
a 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*]
}
}
Agregados simétricos
O Looker usa um recurso chamado "agregações simétricas" para calcular agregações (como somas e médias) corretamente, mesmo quando as mesclagens resultam em fanouts. Os agregados simétricos são descritos em mais detalhes em Como entender os agregados simétricos. O problema de fanout resolvido com os agregados simétricos é explicado na postagem na Comunidade The problem of SQL fanouts.
Chaves primárias obrigatórias
Para que as medições (agregações) venham por mesclagens, é preciso definir chaves primárias em todas as visualizações envolvidas na mesclagem.
Para fazer 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
}
Dialetos SQL compatíveis
Para que o Looker ofereça suporte a agregados simétricos no seu projeto do Looker, o dialeto do banco de dados também precisa oferecer suporte a eles. A tabela a seguir mostra quais dialetos oferecem suporte a agregados simétricos na versão mais recente do Looker:
Dialeto | Compatível? |
---|---|
Avalanche Actian | Sim |
Amazon Athena | Sim |
MySQL do Amazon Aurora | Sim |
Amazon Redshift | Sim |
Apache Druid | Não |
Apache Druid 0.13 ou superior | Não |
Apache Druid 0.18 ou superior | Não |
Apache Hive 2.3 ou superior | Não |
Apache Hive 3.1.2 ou posterior | Não |
Apache Spark 3 ou mais recente | Sim |
ClickHouse | Não |
Cloudera Impala 3.1 ou superior | Sim |
Cloudera Impala 3.1+ com driver nativo | Sim |
Cloudera Impala com driver nativo | Não |
DataVirtuality | Sim |
Databricks | Sim |
Denodo 7 | Sim |
Denodo 8 | Sim |
Dremio | Não |
Dremio 11 ou superior | Sim |
Exasol | Sim |
Firebolt | Sim |
SQL legado do Google BigQuery | Sim |
SQL padrão do Google BigQuery | Sim |
PostgreSQL do Google Cloud | Sim |
Google Cloud SQL | Sim |
Google Spanner (em inglês) | Sim |
Greenplum | Sim |
HyperSQL | Não |
IBM Netezza | Sim |
MariaDB | Sim |
PostgreSQL do Microsoft Azure | Sim |
Banco de dados SQL do Microsoft Azure | Sim |
Microsoft Azure Synapse Analytics | Sim |
Microsoft SQL Server 2008 ou superior | Sim |
Microsoft SQL Server 2012 ou posterior | Sim |
Microsoft SQL Server 2016 | Sim |
Microsoft SQL Server 2017 ou posterior | Sim |
MongoBI | Não |
MySQL | Sim |
MySQL 8.0.12 ou mais recente | Sim |
Oracle | Sim |
Oracle ADWC | Sim |
PostgreSQL 9.5 ou mais recente | Sim |
PostgreSQL anterior à 9.5 | Sim |
PrestoDB | Sim |
PrestoSQL | Sim |
SAP HANA 2 ou posterior | Sim |
SingleStore | Sim |
SingleStore 7 ou superior | Sim |
Snowflake | Sim |
Teradata | Sim |
Trino | Sim |
Vetor | Sim |
Vertica | Sim |
Se o dialeto não for compatível com agregados simétricos, tenha cuidado ao executar mesclagens no Looker, porque alguns tipos de mesclagens podem resultar em agregações imprecisas, como somas e médias. Esse problema e as soluções alternativas são descritos em detalhes na postagem na Comunidade O problema dos fanouts de SQL.
Saiba mais sobre mesclagens
Para saber mais sobre os parâmetros de mesclagem no LookML, consulte a documentação Referência de mesclagem.