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 :
- Aide Looker à éviter les clauses
GROUP BYinutiles. - Nécessaire pour que le paramètre
foreign_keyfonctionne correctement. - Nécessaire au bon fonctionnement des agrégations symétriques. Lorsque vous joignez des vues avec des mesures (agrégats), un
primary_keydoit être défini de chaque côté de la jointure pour calculer correctement les agrégations.
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_groupqui spécifie plusieurstimeframe.
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) ;;
}
CONCATfonctionne 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 ;;
}
}