Distribuição

Uso

visualização: my_view {
derived_table: {
distribution: "customer_id"
...
}
}
Hierarquia
distribution

- ou -

distribution
Valor padrão
Nenhuma

Aceita
O nome de uma coluna em uma tabela derivada ou em uma tabela agregada

Regras especiais
distribution só é compatível com bancos de dados Redshift e Aster.

Definição

distribution permite especificar a coluna de uma tabela derivada permanente (PDT, na sigla em inglês) ou uma tabela agregada em que aplicar uma chave de distribuição para espalhar os dados em um cluster. Quando duas tabelas são mescladas pela coluna especificada no parâmetro distribution, o banco de dados pode encontrar os dados mesclados no mesmo nó para minimizar a E/S do internode. No momento, o distribution só funciona com bancos de dados Redshift e Aster. Para outros dialetos SQL (como MySQL e Postgres), use indexes.

O parâmetro distribution funciona apenas com tabelas permanentes, como PDTs e tabelas agregadas. distribution não é compatível com tabelas derivadas sem uma estratégia de persistência.

Além disso, o parâmetro distribution não é compatível com tabelas derivadas definidas usando create_process ou sql_create.

De modo geral, uma chave de distribuição deve ser aplicada à coluna que será usada como chave externa, ou seja, a coluna que você usa para unir a tabela com outras. Consulte a documentação do seu dialeto para conferir as práticas recomendadas.

Examples

Crie uma tabela derivada permanente customer_order_facts com uma chave de distribuição em customer_id:

view: customer_order_facts {
  derived_table: {
    explore_source: order {
      column: customer_id { field: order.customer_id }
      column: lifetime_orders { field: order.lifetime_orders }
    }
    datagroup_trigger: order_datagroup
    distribution: "customer_id"
  }
}

Crie uma tabela derivada customer_order_facts com base em uma consulta SQL com uma chave de distribuição em customer_id:

view: customer_order_facts {
  derived_table: {
    sql:
      SELECT
        customer_id,
        COUNT(*) AS lifetime_orders
      FROM
        order ;;
    persist_for: "24 hours"
    distribution: "customer_id"
  }
}