primary_key

Utilisation

view: view_name {
  dimension: field_name {
    primary_key: yes 
  }
}
Hiérarchie
primary_key
Types de champs possibles
Dimension

Acceptation
Booléen (oui ou non)

Définition

Le paramètre primary_key indique qu'une dimension est la clé primaire de sa vue. La valeur par défaut est false. Exemple :

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

Le paramètre primary_key présente les caractéristiques suivantes :

Le paramètre primary_key présente les limites suivantes :

  • Vous ne pouvez pas ajouter ce paramètre à plusieurs champs dans chaque vue.
  • Vous ne pouvez pas ajouter ce paramètre à un dimension_group qui spécifie plusieurs timeframe.

Créer une clé primaire composée

Si votre clé primaire est composée de plusieurs colonnes, vous pouvez créer une dimension qui concatène ces colonnes, puis la déclarer comme clé primaire. Exemple :

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

CONCAT fonctionne dans certaines bases de données, comme MySQL, mais d'autres bases de données peuvent avoir un équivalent différent. Redshift, par exemple, utilise || comme opérateur de concaténation.

Utiliser une table dérivée persistante (PDT) pour créer une clé primaire

Dans les cas où il n'existe aucun moyen raisonnable d'identifier une ligne unique comme clé primaire, vous pouvez créer une table dérivée persistante (PDT) pour générer un ID unique. Par exemple, le tableau dérivé suivant utilise le numéro de ligne du tableau comme clé primaire :

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 ;;
    ...
  }
}

Définir une clé primaire dans une vue étendue

Si vous utilisez le paramètre extends pour étendre une vue, la clé primaire de la vue de base sera étendue à la nouvelle vue.

Pour remplacer la clé primaire par une nouvelle dimension, ajoutez primary_key: no à la définition de la dimension d'origine dans la nouvelle vue, et ajoutez primary_key: yes à la définition de la nouvelle dimension dans la nouvelle vue.

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

view: new {
  extends: base

  dimension: old_primary_key {
    primary_key: no
  }

  dimension: new_primary_key {
    primary_key: yes
    sql: ${TABLE}.new_id ;;
  }
}