Compartilhar via


Usar junções em exibições de métrica

As junções em exibições de métrica dão suporte a junções diretas de uma tabela de fatos a tabelas de dimensão (esquema estrela) e junções que atravessam da tabela de fatos para tabelas de dimensão e, em seguida, a tabelas de subdimensão, permitindo junções de vários saltos entre tabelas de dimensão normalizadas (esquemas floco de neve). Esta página explica como definir junções na definição YAML de uma exibição de métrica.

Observação

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

Esquemas de estrela modelo

Em um esquema de estrela, é a source tabela de fatos e une-se a uma ou mais tabelas de dimensão usando um LEFT OUTER JOIN. As exibições de métrica 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 de métrica usando uma ON cláusula ou uma USING cláusula.

  • ON cláusula: usa uma expressão booliana para definir a condição de junção.
  • USING cláusula: lista colunas com o mesmo nome na tabela pai e na tabela unida. Para junções de primeiro nível, o pai é a origem da exibição de métrica. Para junções aninhadas em um esquema floco de neve, o pai é a junção imediata upstream.

A junção 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.

Observação

Os analisadores YAML 1.1 (como PyYAML) podem interpretar incorretamente determinadas chaves não listadas, comoon, , off, yesou noNO, como valores boolianos. Isso pode causar erros de junção. Para evitar esse problema, encapsule 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 de métrica, enquanto a junção name refere-se a colunas da tabela unida. Por exemplo, na condição de junção source.dimension_table_1_fk = dimension_table_1.pk, source refere-se à tabela de origem da exibição de métrica (fact_table) e dimension_table_1 refere-se à tabela unida. A referência padrão será a tabela de junção se nenhum prefixo for fornecido em uma on cláusula.

Esquema de floco de neve modelo

Um esquema floco de neve estende um esquema de estrela normalizando tabelas de dimensão 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 junções do Snowflake exigem a computação do Databricks Runtime 17.1 e superior.

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

  1. Crie uma exibição de métrica.
  2. Adicione junções de primeiro nível (esquema 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 floco de neve. O conjunto de dados TPCH pode ser acessado no catálogo em seu workspace do samples 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