Nutzung
Dimension: Feldname {
primary_key: yes
}
}
Hierarchie
primary_key |
Mögliche Feldtypen
DimensionAkzeptiert
Ein boolescher Wert (ja oder nein) |
Definition
Der Parameter primary_key
gibt an, dass eine Dimension der Primärschlüssel für die Ansicht ist. Der Standardwert ist false
. Beispiel:
dimension: id {
primary_key: yes
sql: ${TABLE}.id ;;
}
Der Parameter primary_key
hat die folgenden Eigenschaften und Anforderungen:
- Hilft Looker, unnötige
GROUP BY
-Klauseln zu vermeiden. - Ist erforderlich, damit der
foreign_key
-Parameter richtig funktioniert. - Ist für die ordnungsgemäße Funktion von symmetrischen Aggregaten erforderlich. Wenn Sie Datenansichten mit Messwerten (aggregiert) kombinieren, muss auf jeder Seite des Joins ein
primary_key
definiert sein, um die Aggregationen ordnungsgemäß zu berechnen. - Darf kein
dimension_group
sein, der mehr als einetimeframe
angibt.
Zusammengesetzten Primärschlüssel erstellen
Wenn Sie einen Primärschlüssel haben, der aus mehreren Spalten besteht, können Sie eine Dimension erstellen, die diese Spalten verkettet, und dann als Primärschlüssel festlegen. Beispiel:
dimension: primary_key {
primary_key: yes
sql: CONCAT(${TABLE}.promotion_id, ${TABLE}.sku) ;;
}
CONCAT
funktioniert in einigen Datenbanken, z. B. in MySQL, in anderen Datenbanken kann jedoch ein anderes Äquivalent vorhanden sein. Redshift verwendet beispielsweise||
als Verkettungsoperator.
Persistente abgeleitete Tabelle (PDT) zum Erstellen eines Primärschlüssels verwenden
Wenn es keine vernünftige Möglichkeit gibt, eine eindeutige Zeile als Primärschlüssel festzulegen, können Sie eine persistente abgeleitete Tabelle (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 ;;
...
}
}