Como trabalhar com junções no LookML

Com as mesclagens, é possível conectar diferentes visualizações para analisar dados de mais de uma visualização ao mesmo tempo e conferir como partes diferentes dos dados se relacionam.

Por exemplo, seu banco de dados pode incluir as tabelas order_items, orders e users. Você pode usar as mesclagens para analisar os dados de todas as tabelas ao mesmo tempo. Esta página explica as junções no LookML, incluindo parâmetros e padrões de junção específicos.

As junções 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, 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 na Análise order_items, order_items aparece na cláusula FROM do SQL gerado:

SELECT ...
FROM order_items

Você pode adicionar outras informações à 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, você pode conferir os campos de orders e order_items no seletor de campo de Análise detalhada:

A análise "Itens do pedido" inclui os campos da visualização "Itens do pedido" e da visualização "Pedidos" mesclados.

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 união

Quatro parâmetros principais são usados para a união: 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, primeiro declare 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 à seção order_items Explore:

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

Etapa 3: type

Considere qual tipo de uniã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 mescla é importante para que o Looker calcule medidas precisas. A relação é definida de a 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 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 vai usar many_to_one por 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 combinar 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 precisam ser combinados para realizar a mesclagem:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
    sql_on: ${order_items.order_id} = ${orders.id} ;;
  }
}

Você também pode escrever junções 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 sobre operadores de substituição para saber mais sobre a sintaxe ${ ... } nesses exemplos.

Etapa 6: testes

Para testar se essa mesclagem está funcionando conforme o esperado, acesse a Análise Itens do pedido. Você vai encontrar campos de order_items e orders.

Consulte Testar os campos no recurso Explorar para saber mais sobre como testar mudanças no LookML em um recurso Explorar.

Participar por outra visualização

É possível unir uma visualização a uma seção "Explorar" usando outra visualização. No exemplo de parâmetros de mesclagem, você mesclou orders com order_items pelo campo order_id. Também podemos mesclar os dados de uma visualização chamada users com a Análise detalhada order_items, mesmo que não tenham um campo comum. Isso pode ser feito pela união através da visualização orders.

Use o parâmetro sql_on ou foreign_key para unir a visualização users à orders, em vez de order_items Explore. Para fazer isso, especifique corretamente o escopo do campo de orders como orders.user_id.

Confira 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 visualização users contém dados de compradores e vendedores. Para mesclar os dados dessa visualização em order_items, mas separadamente para compradores e vendedores, você pode 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, além de dar um nome exclusivo a ela. 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, e 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.

Como limitar campos de 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 incluídos quando são mesclados. No entanto, talvez você queira trazer apenas um subconjunto de campos.

Por exemplo, quando orders é combinada com order_items, é possível trazer apenas os campos shipping e tax pela combinação:

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 fazer referência a 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 um fanout. Os agregados simétricos são descritos em mais detalhes em Noções básicas sobre agregados simétricos. O problema de fanout que os agregados do symmetrid resolvem é explicado na postagem da Comunidade O problema dos fanouts do SQL.

Chaves primárias obrigatórias

Para que as medidas (agregações) sejam feitas por junções, é necessário definir chaves primárias em todas as visualizações envolvidas na junção.

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 projeto, 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?
Actian Avalanche
Sim
Amazon Athena
Sim
MySQL do Amazon Aurora
Sim
Amazon Redshift
Sim
Apache Druid
Não
Apache Druid 0.13 ou mais recente
Não
Apache Druid 0.18+
Não
Apache Hive 2.3 ou mais recente
Não
Apache Hive 3.1.2 ou mais recente
Não
Apache Spark 3 ou mais recente
Sim
ClickHouse
Não
Cloudera Impala 3.1 ou mais recente
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 mais recente
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
Sim
Greenplum
Sim
HyperSQL
Não
IBM Netezza
Sim
MariaDB
Sim
Microsoft Azure PostgreSQL
Sim
Banco de dados SQL do Microsoft Azure
Sim
Microsoft Azure Synapse Analytics
Sim
Microsoft SQL Server 2008 ou mais recente
Sim
Microsoft SQL Server 2012 ou mais recente
Sim
Microsoft SQL Server 2016
Sim
Microsoft SQL Server 2017 ou mais recente
Sim
MongoBI
Não
MySQL
Sim
MySQL 8.0.12+
Sim
Oracle
Sim
Oracle ADWC
Sim
PostgreSQL 9.5 ou mais recente
Sim
PostgreSQL anterior à versão 9.5
Sim
PrestoDB
Sim
PrestoSQL
Sim
SAP HANA 2+
Sim
SingleStore
Sim
SingleStore 7+
Sim
Snowflake
Sim
Teradata
Sim
Trino
Sim
Vetor
Sim
Vertica
Sim

Se o seu dialeto não oferece suporte a agregações simétricas, 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 da comunidade O problema de fanouts do SQL.

Saiba mais sobre as mesclagens

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