Partilhar via


Usar associações em exibições métricas

As junções em exibições métricas suportam junções diretas de uma tabela de fatos para tabelas de dimensão (esquema em estrela) e junções que atravessam da tabela de fatos para tabelas de dimensão e, em seguida, para tabelas de subdimensão, permitindo junções multi-hop em tabelas de dimensão normalizadas (esquemas de floco de neve). Esta página explica como definir junções na definição YAML de uma visualização métrica.

Observação

As tabelas unidas não podem incluir MAP colunas de texto. Para saber como descompactar valores de colunas de MAP tipo, consulte Explodir elementos aninhados de um mapa ou matriz.

Esquemas de estrela modelo

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

Especifique colunas de junção em uma exibição métrica usando uma ON cláusula ou uma USING cláusula.

  • ON Cláusula: Usa uma expressão booleana para definir a condição de junção.
  • USING Cláusula: Lista colunas com o mesmo nome na tabela pai e na tabela associada. Para junções de primeiro nível, o pai é a origem da visualização métrica. Para junções aninhadas em um esquema de floco de neve, o pai é a junção a montante imediata.

A união deve seguir uma relação muitos-para-um. Em casos de muitos-para-muitos, a primeira linha correspondente da tabela de dimensão unida é selecionada.

Observação

Os analisadores YAML 1.1 (como o PyYAML) podem interpretar incorretamente certas chaves não citadas, como on, off, yes, no, ou , como NOvalores booleanos. Isso pode causar erros de junção. Para evitar esse problema, envolva 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)

Observação

O source namespace faz referência a colunas da origem da exibição métrica, enquanto a junção name se refere a colunas da tabela associada. Por exemplo, na condição source.dimension_table_1_fk = dimension_table_1.pkde junção , source refere-se à tabela de origem da exibição métrica (fact_table) e dimension_table_1 refere-se à tabela associada. A referência padrão recai sobre a tabela de junção caso não seja fornecido um prefixo numa cláusula on.

Modelo de esquema de floco de neve

Um esquema de floco de neve estende um esquema de estrela normalizando tabelas de dimensões e conectando-as a subdimensões. Isso cria uma estrutura de junção de vários níveis que pode corresponder à profundidade do seu modelo de dados.

Observação

As juntas do Snowflake exigem o Databricks Runtime compute 17.1 e superior.

Para definir uma junção que modela um esquema de floco de neve:

  1. Crie uma vista métrica.
  2. Adicione junções de primeiro nível (esquema em estrela).
  3. Junte-se a outras tabelas de dimensão.
  4. Exponha dimensões aninhadas adicionando dimensões em sua exibição.

O exemplo a seguir usa o conjunto de dados TPCH para ilustrar como modelar um esquema de floco de neve. O conjunto de dados TPCH pode ser acessado samples no catálogo em seu espaço de trabalho do Azure Databricks.

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