Esta página te ayudará a solucionar este error de Looker:
Non-unique value/primary key (or sql_distinct_key), value overflow or collision when computing sum
Este error puede deberse a varios problemas:
- Una clave principal no única (la más habitual)
- Uso incorrecto de
sql_distinct_key
- Hacer referencia a un campo en diferentes vistas cuando hay desgloses
Clave principal no única
La causa más habitual de este error es que tu consulta incluye una clave principal no única. Para especificar una clave principal, debe usar primary_key: yes
en una dimensión. Además, debe ser una dimensión sin valores repetidos.
Solución rápida
Una vez que hayas identificado las dimensiones de clave principal en tu consulta, puedes comprobar si son únicas en SQL Runner de Looker con esta consulta:
SELECT COUNT(*), COUNT(DISTINCT your_primary_key) FROM your_table_name
Si los recuentos de esta consulta coinciden, la clave principal es única. Si los recuentos no coinciden, la clave principal no es única y aparece en varias filas. Deberá elegir o crear una dimensión como clave principal. Si ninguna dimensión contiene valores completamente únicos, puede que tenga que concatenar campos para crear su propia dimensión de clave principal.
Usar row_number
para generar una clave principal de una tabla derivada
Si recibes este error con una tabla derivada, puedes usar la función de ventana row_number()
en las bases de datos de PostgreSQL y Redshift para crear un campo único. Este campo se puede usar como clave principal:
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 ;; } }
En MySQL, puedes usar una variable que itere cada fila para conseguir el mismo efecto:
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 ;; } }
Uso incorrecto de sql_distinct_key
Si alguna de las medidas de su consulta es de tipo sum_distinct
, puede que haya una discrepancia de unicidad entre los parámetros sql_distinct_key
y sql
de esa medida.
Solución rápida
Consulta los requisitos de estos parámetros en nuestra sum_distinct
página de documentación.
Hacer referencia a campos de diferentes vistas con fanouts
Es posible que tu consulta use una medida de la vista A, pero que la medida haga referencia a un campo de la vista B. En esta situación, Looker usará la clave principal de la vista A para calcular esa medida. Si tu consulta implica una distribución, puede que no sea la clave principal correcta. Para familiarizarte con las difusiones, consulta esta publicación de la comunidad relacionada.
Solución rápida
Para solucionar este problema, añada la clave principal de la vista B a la métrica problemática con el parámetro sql_distinct_key
.
¿Qué ocurre si no se aplica ninguna de las causas indicadas, pero el error sigue produciéndose?
Hay una situación muy concreta en la que tu clave principal puede ser única y las otras causas de este problema no se aplican a tu consulta, pero el error sigue produciéndose. En primer lugar, tu consulta implicará varias combinaciones de relationship: one_to_many
. En segundo lugar, una de las métricas de la consulta hará referencia a una dimensión que combina valores de varias vistas combinadas.
Para solucionar este problema, anota esa medida y sigue estos pasos:
- Busque la dimensión de la medida que combina valores de varias vistas unidas.
- Busca las vistas a las que hace referencia esa dimensión.
- Concatena las claves principales de esas vistas con la función de concatenación de tu dialecto SQL.
- Coloca esa clave concatenada en un parámetro
sql_distinct_key
de la medida que ha provocado el problema.