chave_principal

Uso

view: view_name {
dimensão: field_name {
primary_key: sim
}
}
Hierarquia
primary_key
Tipos de campo possíveis
Dimensão

Aceita
Um booleano (sim ou não)

Definição

O parâmetro primary_key especifica que uma dimensão é a chave primária para a visualização dela. O valor padrão é false. Exemplo:

dimension: id {
  primary_key: yes
  sql: ${TABLE}.id ;;
}

O parâmetro primary_key tem as seguintes qualidades e requisitos:

  • Ajuda o Looker a evitar cláusulas GROUP BY desnecessárias.
  • É necessário para que o parâmetro foreign_key funcione corretamente.
  • É necessário para o funcionamento adequado dos agregados simétricos. Ao mesclar visualizações com medidas (agregadas), é necessário definir um primary_key em cada lado da mesclagem para calcular corretamente as agregações.
  • Não pode ser um dimension_group que especifica mais de um timeframe.

Como criar uma chave primária composta

Se você tiver uma chave primária composta de várias colunas, crie uma dimensão que as concatena e declare-a como sua chave primária. Exemplo:

dimension: primary_key {
  primary_key: yes
  sql: CONCAT(${TABLE}.promotion_id, ${TABLE}.sku) ;;
}

CONCAT funciona em alguns bancos de dados, como o MySQL, mas outros podem ter um equivalente diferente. O Redshift, por exemplo, usa || como o operador de concatenação.

Como usar uma tabela derivada permanente (PDT) para criar uma chave primária

Nos casos em que não há uma forma razoável de identificar uma linha exclusiva como uma chave primária, é possível criar uma tabela derivada persistente (PDT, na sigla em inglês) para gerar um ID exclusivo. Por exemplo, a tabela derivada abaixo usa o número da linha da tabela para servir como chave primária:

view: transaction {
  # sql_table_name: warehouse.transaction
  derived_table: {
    sql: SELECT ROW_NUMBER as transaction_pk, * FROM warehouse.transaction ;;
    sql_trigger_value: SELECT CURRENT_DATE ;;
    indexes: [customer_id, product_id, salesperson_id, transaction_date]
  }

  dimension: transaction_pk {
    type: number
    primary_key: yes
    hidden: yes
    sql: ${TABLE}.transaction_pk ;;
    ...
  }
}