primary_key

Nutzung

view: view_name {
  dimension: field_name {
    primary_key: yes 
  }
}
Hierarchie
primary_key
Mögliche Feldtypen
Dimension

Akzeptiert
Ein boolescher Wert („Ja“ oder „Nein“)

Definition

Mit dem Parameter primary_key wird angegeben, dass eine Dimension der Primärschlüssel für die zugehörige Ansicht ist. Der Standardwert ist false. Beispiel:

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

Der Parameter primary_key hat die folgenden Eigenschaften:

  • Hilft Looker, unnötige GROUP BY-Klauseln zu vermeiden.
  • Er ist erforderlich, damit der Parameter foreign_key richtig funktioniert.
  • Ist für das ordnungsgemäße Funktionieren von symmetrischen Summen erforderlich. Wenn Sie Ansichten mit Messwerten (Aggregaten) verknüpfen, muss auf jeder Seite des Joins ein primary_key definiert werden, damit die Aggregationen richtig berechnet werden.

Für den Parameter primary_key gelten die folgenden Einschränkungen:

  • Sie können diesen Parameter in jeder Ansicht nur einem Feld hinzufügen.
  • Sie können diesen Parameter nicht einem dimension_group hinzufügen, in dem mehr als ein timeframe angegeben ist.

Zusammengesetzten Primärschlüssel erstellen

Wenn Sie einen Primärschlüssel haben, der aus mehreren Spalten besteht, können Sie eine Dimension erstellen, in der diese Spalten verkettet werden, und diese dann als Primärschlüssel deklarieren. Beispiel:

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

CONCAT funktioniert in einigen Datenbanken wie MySQL, aber andere Datenbanken haben möglicherweise ein anderes Äquivalent. In Redshift wird beispielsweise || als Verkettungsoperator verwendet.

Primärschlüssel mit einer persistenten abgeleiteten Tabelle (PDT) erstellen

Wenn es keine sinnvolle Möglichkeit gibt, eine eindeutige Zeile als Primärschlüssel zu identifizieren, können Sie eine persistente abgeleitete Tabelle (Persistent Derived Table, PDT) erstellen, um eine eindeutige ID zu generieren. In der folgenden abgeleiteten Tabelle wird beispielsweise die Zeilennummer der Tabelle als Primärschlüssel verwendet:

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

Neuen Primärschlüssel in einer erweiterten Ansicht definieren

Wenn Sie den Parameter extends verwenden, um eine Ansicht zu erweitern, wird der Primärschlüssel aus der Basisansicht auf die neue Ansicht erweitert.

Wenn Sie den Primärschlüssel in eine neue Dimension ändern möchten, fügen Sie der ursprünglichen Dimensionsdefinition in der neuen Ansicht primary_key: no hinzu und der neuen Dimensionsdefinition in der neuen Ansicht primary_key: yes.

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