Como trabalhar com junções no LookML

As mesclagens permitem conectar visualizações diferentes para que você possa analisar dados de mais de uma visualização ao mesmo tempo e ver como as diferentes partes dos dados se relacionam.

Por exemplo, seu banco de dados pode incluir as tabelas order_items, orders e users. É possível usar mesclagens para analisar dados de todas as tabelas ao mesmo tempo. Esta página explica as mesclagens no LookML, incluindo parâmetros de mesclagem específicos e padrões de mesclagem.

As mesclagens começam com uma análise

As junções são definidas no arquivo 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, 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 na análise order_items, order_items aparece na cláusula FROM do SQL gerado:

SELECT ...
FROM order_items

É possível mesclar mais informações à análise order_items. Por exemplo, você pode usar o seguinte exemplo de LookML para mesclar a visualização orders à análise 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 realiza duas ações. Primeiro, é possível ver campos de orders e order_items no seletor de campos da análise:

A análise detalhada de itens do pedido inclui os campos da visualização "Itens do pedido" e da visualização "Pedidos" associada.

Em segundo lugar, o LookML descreve como mesclar orders e order_items. Esse 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 com mais detalhes nas seções a seguir.

Parâmetros de mesclagem

Quatro parâmetros principais são usados para mesclar: join, type, relationship e sql_on.

Etapa 1: iniciar a análise

Primeiro, crie a análise order_items:

explore: order_items { ... }

Etapa 2: join

Para mesclar uma tabela, primeiro declare-a em uma visualização. Neste exemplo, suponha que orders seja uma visualização já existente no seu modelo.

Em seguida, use o parâmetro join para declarar que você quer mesclar a visualização orders à análise order_items:

explore: order_items {
  join: orders { ... }
}

Etapa 3: type

Considere qual tipo de mesclagem realizar. 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.

Etapa 4: relationship

Defina uma relação de mesclagem entre a análise order_items e a visualização orders. Declarar corretamente a relação de uma mesclagem é importante para que o Looker calcule medidas precisas. A relação é definida da análise order_items para 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 de pedido para um único pedido. A relação da análise order_items com 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 vai usar many_to_one como padrão.

Para mais dicas sobre como definir o parâmetro relationship corretamente para uma mesclagem, consulte Como definir o parâmetro relationship corretamente.

Etapa 5: sql_on

Declare como mesclar 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, é possível declarar quais campos precisam ser 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 escrever mesclagens mais complexas. Por exemplo, talvez você queira 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 dos operadores de substituição para saber mais sobre a sintaxe ${ ... } nesses exemplos.

Etapa 6: testes

Teste se essa mesclagem está funcionando conforme o esperado acessando a análise Itens do pedido. Você vai encontrar campos de order_items e orders.

Consulte Testar os campos na análise para saber mais sobre como testar mudanças do LookML em uma análise.

Mesclar por outra visualização

É possível mesclar uma visualização a uma análise por outra visualização. No exemplo de parâmetros de mesclagem, você mesclou 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 elas não compartilhem um campo comum. Isso pode ser feito mesclando por a visualização orders.

Use o sql_on parâmetro ou o foreign_key parâmetro para mesclar a visualização users à visualização orders, em vez da análise order_items. Para isso, defina corretamente o escopo do campo de orders como orders.user_id.

Confira um exemplo usando 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} ;;
  }
}

Mesclar uma visualização mais de uma vez

Uma visualização users contém dados de compradores e vendedores. Para mesclar dados dessa visualização em order_items, mas fazer isso separadamente para compradores e vendedores, é possível mesclar users duas vezes, com nomes diferentes, usando o parâmetro from.

O parâmetro from permite especificar qual visualização usar em uma mesclagem, ao mesmo tempo em que atribui um nome exclusivo à mesclagem. Por 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, apenas os dados do comprador são mesclados como buyers, enquanto apenas os dados do vendedor são mesclados como sellers.

Observação: a visualização users agora precisa ser referenciada pelos nomes de alias buyers e sellers na mesclagem.

Limitar campos de uma mesclagem

O parâmetro fields permite especificar quais campos são extraídos de uma mesclagem para uma análise. Por padrão, todos os campos de uma visualização são extraídos quando mesclados. No entanto, talvez você queira extrair apenas um subconjunto de campos.

Por exemplo, quando orders é mesclado a order_items, talvez você queira extrair apenas os campos shipping e tax da 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 set parâmetro. Suponha que você tenha o seguinte conjunto definido na visualização orders:

set: orders_set {
  fields: [created_date, shipping, tax]
}

É possível extrair apenas esses três campos ao mesclar 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*]
  }
}

Conjuntos simétricos

O Looker usa um recurso chamado "conjuntos simétricos" para calcular agregações (como somas e médias) corretamente, mesmo quando as mesclagens resultam em um fanout. Os conjuntos simétricos são descritos com mais detalhes em Noções básicas sobre conjuntos simétricos. O problema de divergência que os agregados simétricos resolvem é explicado na postagem na Comunidade O problema de divergências SQL.

Chaves primárias obrigatórias

Para que as medidas (agregações) sejam extraídas das mesclagens, é necessário definir chaves primárias em todas as visualizações envolvidas na mesclagem.

Para fazer isso, adicione o primary_key parâmetro à 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 conjuntos 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 conjuntos simétricos na versão mais recente do Looker:

Dialeto Compatível?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13.x - 0.17.x
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud AlloyDB for PostgreSQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica

Se o dialeto não oferecer suporte a conjuntos 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 de fanouts SQL.

Saiba mais sobre mesclagens

Para saber mais sobre os parâmetros de mesclagem no LookML, consulte a documentação de referência de mesclagem.