Pular para o conteúdo principal

Usar junção na visualização de métricas

a junção na visualização de métricas oferece suporte tanto à junção direta de uma tabela de fatos para tabelas de dimensões (esquema em estrela) quanto à junção transversal da tabela de fatos para tabelas de dimensões e, em seguida, para tabelas de subdimensões, permitindo junção multi-hop entre tabelas de dimensões normalizadas (esquemas em floco de neve). Esta página explica como definir join na definição YAML de uma view de métricas.

nota

Tabelas unidas não podem incluir colunas do tipo MAP . Para aprender como descompactar valores de colunas do tipo MAP , consulte Detonar elementos aninhados de um mapa ou matriz.

Esquemas de estrelas modelo

Em um esquema em estrela, o source é a tabela de fatos e se junta a uma ou mais tabelas de dimensão usando um LEFT OUTER JOIN. A visualização de métricas join as tabelas de fatos e dimensões necessárias para a consulta específica, com base nas dimensões e medidas selecionadas.

Especifique colunas join em uma view de métricas usando uma cláusula ON ou uma cláusula USING .

  • CláusulaON : usa uma expressão booleana para definir a condição join .
  • CláusulaUSING : Lista colunas com o mesmo nome na tabela pai e na tabela unida. Para junção de primeiro nível, o pai é a origem da view métricas. Para junção aninhada em um esquema floco de neve, o pai é a join upstream imediata.

A join deve seguir um relacionamento de muitos para um. Em casos de muitos para muitos, a primeira linha correspondente da tabela de dimensões unida é selecionada.

nota

Os analisadores YAML 1.1 (como PyYAML) podem interpretar incorretamente certas chaves sem aspas, como on, off, yes, no ou NO, como valores booleanos. Isso pode causar erros join . Para evitar esse problema, coloque essas chaves entre aspas. Por exemplo: 'on': source.dim_fk = dim.pk

source: catalog.schema.fact_table

joins:

# The on clause supports a boolean expression
- name: dimension_table_1
source: catalog.schema.dimension_table_1
on: source.dimension_table_1_fk = dimension_table_1.pk

# The using clause supports an array of columns
# found in both of the tables being joined.
- name: dimension_table_2
source: catalog.schema.dimension_table_2
using:
- dimension_table_2_key_a
- dimension_table_2_key_b

dimensions:

# Dimension referencing a join column from dimension_table_1 using dot notation
- name: Dimension table 1 key
expr: dimension_table_1.pk

measures:

# Measure referencing a join column from dimension_table_1
- name: Count of dimension table 1 keys
expr: COUNT(dimension_table_1.pk)

nota

O namespace source faz referência a colunas da fonte da view métricas, enquanto a join name faz referência a colunas da tabela unida. Por exemplo, na condição join source.dimension_table_1_fk = dimension_table_1.pk, source refere-se à tabela de origem da view métricas (fact_table) e dimension_table_1 refere-se à tabela unida. A referência padrão é para a tabela join se nenhum prefixo for fornecido em uma cláusula on .

Esquema de floco de neve modelo

Um esquema em floco de neve estende um esquema em estrela normalizando tabelas de dimensões e conectando-as a subdimensões. Isso cria uma estrutura join multinível que pode corresponder à profundidade do seu modelo de dados.

nota

A junção Snowflake requer Databricks Runtime compute 17.1 e acima.

Para definir uma join que modela um esquema floco de neve:

  1. Crie uma view de métricas.
  2. Adicione junção de primeiro nível (esquema em estrela).
  3. juntar com outras tabelas de dimensão.
  4. Exponha dimensões aninhadas adicionando dimensões na sua view.

O exemplo a seguir usa o dataset TPCH para ilustrar como modelar um esquema floco de neve. O dataset TPCH pode ser acessado no catálogo samples no seu workspace Databricks .

YAML
source: samples.tpch.orders

joins:
- name: customer
source: samples.tpch.customer
on: source.o_custkey = customer.c_custkey
joins:
- name: nation
source: samples.tpch.nation
on: customer.c_nationkey = nation.n_nationkey
joins:
- name: region
source: samples.tpch.region
on: nation.n_regionkey = region.r_regionkey

dimensions:
- name: clerk
expr: o_clerk
- name: customer
expr: customer # returns the full customer row as a struct
- name: customer_name
expr: customer.c_name
- name: nation
expr: customer.nation
- name: nation_name
expr: customer.nation.n_name