primary_key

Uso

view: view_name {
  dimension: field_name {
    primary_key: yes 
  }
}
Jerarquía
primary_key
Tipos de campos posibles
Dimensión

Acepta
Un valor booleano (sí o no)

Definición

El parámetro primary_key especifica que una dimensión es la clave primaria de su vista. El valor predeterminado es false. Por ejemplo:

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

El parámetro primary_key tiene las siguientes cualidades:

El parámetro primary_key tiene las siguientes limitaciones:

  • No puedes agregar este parámetro a más de un campo en cada vista.
  • No puedes agregar este parámetro a un objeto dimension_group que especifique más de un timeframe.

Cómo crear una clave primaria compuesta

Si tienes una clave primaria que se compone de varias columnas, puedes crear una dimensión que concatene esas columnas y, luego, declararla como tu clave primaria. Por ejemplo:

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

CONCAT funciona en algunas bases de datos, como MySQL, pero otras bases de datos pueden tener un equivalente diferente. Por ejemplo, Redshift usa || como operador de concatenación.

Cómo usar una tabla derivada persistente (PDT) para crear una clave primaria

En los casos en que no haya una forma razonable de identificar una fila única como clave primaria, puedes crear una tabla derivada persistente (PDT) para generar un ID único. Por ejemplo, la siguiente tabla derivada usa el número de fila de la tabla como clave primaria:

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

Cómo definir una clave primaria nueva en una vista extendida

Si usas el parámetro extends para extender una vista, la clave primaria de la vista base se extenderá a la vista nueva.

Para cambiar la clave primaria a una dimensión nueva, agrega primary_key: no a la definición de la dimensión original en la vista nueva y agrega primary_key: yes a la definición de la dimensión nueva en la vista nueva.

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