Auf dieser Seite finden Sie Informationen zur Fehlerbehebung bei diesem Looker-Fehler:
Non-unique value/primary key (or sql_distinct_key), value overflow or collision when computing sum
Dieser Fehler kann verschiedene Ursachen haben:
- Ein nicht eindeutiger Primärschlüssel (am häufigsten)
- Falsche Verwendung von
sql_distinct_key
- Felder in verschiedenen Ansichten referenzieren, wenn es Verzweigungen gibt
Nicht eindeutiger Primärschlüssel
Die häufigste Ursache für diesen Fehler ist, dass Ihre Abfrage einen nicht eindeutigen Primärschlüssel enthält. Sie geben einen Primärschlüssel an, indem Sie primary_key: yes
auf eine Dimension anwenden. Diese Dimension darf keine wiederholten Werte enthalten.
Schnelle Fehlerbehebung
Nachdem Sie die Primärschlüsseldimensionen in Ihrer Abfrage identifiziert haben, können Sie sie mit dieser Abfrage im SQL Runner von Looker auf Eindeutigkeit prüfen:
SELECT COUNT(*), COUNT(DISTINCT your_primary_key) FROM your_table_name
Wenn die Zählungen in dieser Abfrage übereinstimmen, ist der Primärschlüssel eindeutig. Wenn die Zählungen nicht übereinstimmen, ist der Primärschlüssel nicht eindeutig und erscheint in mehreren Zeilen. Sie müssen eine neue Dimension als Primärschlüssel auswählen oder erstellen. Wenn keine einzelne Dimension ausschließlich eindeutige Werte enthält, müssen Sie möglicherweise Felder zusammenführen, um eine eigene Primärschlüsseldimension zu erstellen.
Mit row_number
einen Primärschlüssel für eine abgeleitete Tabelle generieren
Wenn dieser Fehler bei einer abgeleiteten Tabelle auftritt, können Sie die Fensterfunktion row_number()
in Postgres- und Redshift-Datenbanken verwenden, um ein eindeutiges Feld zu erstellen. Dieses Feld kann dann als Primärschlüssel verwendet werden:
view: derived_table_name { derived_table { sql: SELECT row_number() OVER(ORDER BY created_at) AS prim_key, * FROM orders ;; } dimension: prim_key { type: number primary_key: yes sql: ${TABLE}.prim_key ;; } }
In MySQL können Sie eine Variable verwenden, die jede Zeile durchläuft, um denselben Effekt zu erzielen:
view: derived_table_name { derived_table { sql: SELECT CAST(@rownum := @rownum + 1 AS UNSIGNED) AS prim_key, t.* FROM orders t, (SELECT @rownum := 0) r ;; } dimension: prim_key { type: number primary_key: yes sql: ${TABLE}.prim_key ;; } }
Falsche Verwendung von sql_distinct_key
Wenn einer der Messwerte in Ihrer Abfrage vom Typ sum_distinct
ist, gibt es möglicherweise eine Abweichung bei der Eindeutigkeit zwischen den Parametern sql_distinct_key
und sql
dieses Messwerts.
Schnelle Fehlerbehebung
Die Anforderungen an diese Parameter findest du auf unserer sum_distinct
Dokumentationsseite.
Felder in Ansichten mit Verzweigungen referenzieren
In Ihrer Abfrage wird möglicherweise ein Messwert aus Ansicht A verwendet, der aber auf ein Feld aus Ansicht B verweist. In diesem Fall verwendet Looker den Primärschlüssel aus Ansicht A, um diesen Messwert zu berechnen. Wenn Ihre Abfrage einen Verzweigungspunkt enthält, ist dies möglicherweise nicht der richtige Primärschlüssel. Weitere Informationen zu Verzweigungen findest du in diesem Communitybeitrag.
Schnelle Fehlerbehebung
Um dieses Problem zu beheben, fügen Sie der betroffenen Messgröße mit dem Parameter sql_distinct_key
den Primärschlüssel aus Ansicht B hinzu.
Was passiert, wenn keine der aufgeführten Ursachen zutrifft, der Fehler aber trotzdem auftritt?
Es gibt eine ganz bestimmte Situation, in der Ihr Primärschlüssel eindeutig sein kann und die anderen Ursachen dieses Problems nicht auf Ihre Abfrage zutreffen, der Fehler aber trotzdem auftritt. Erstens: Ihre Abfrage enthält mehrere Joins von relationship: one_to_many
. Zweitens: Eines der Messwerte in Ihrer Abfrage verweist auf eine Dimension, die Werte aus mehreren zusammengeführten Datenansichten kombiniert.
Notieren Sie sich diese Maßeinheit und führen Sie dann die folgenden Schritte aus, um das Problem zu beheben:
- Suchen Sie die Dimension im Messwert, die Werte aus mehreren zusammengeführten Datenansichten kombiniert.
- Suchen Sie nach den Datenansichten, auf die diese Dimension verweist.
- Verbinden Sie die Primärschlüssel aus diesen Ansichten mithilfe der Koncatenationsfunktion Ihres SQL-Dialekts.
- Fügen Sie diesen zusammengesetzten Schlüssel in einen
sql_distinct_key
-Parameter für das Messwert-Element ein, das das Problem verursacht hat.