이 페이지는 Looker 오류 문제를 해결하는 데 도움이 됩니다.
Non-unique value/primary key (or sql_distinct_key), value overflow or collision when computing sum
이 오류의 원인은 다음 중 하나입니다.
고유하지 않은 기본 키
이 오류의 가장 일반적인 원인은 쿼리에 고유하지 않은 기본 키가 포함되어 있기 때문입니다. 측정기준에서 primary_key: yes
를 사용하여 기본 키를 지정합니다. 이는 반복되는 값이 없는 측정기준이어야 합니다.
빠른 해결 방법
쿼리에서 기본 키 측정기준을 식별하면 다음 쿼리로 Looker의 SQL Runner에서 고유성을 테스트할 수 있습니다.
SELECT COUNT(*), COUNT(DISTINCT your_primary_key) FROM your_table_name
이 쿼리의 개수가 일치하는 경우 기본 키가 고유합니다. 개수가 일치하지 않는 경우 기본 키가 고유하지 않으며 여러 행에 표시됩니다. 새 측정기준을 기본 키로 선택하거나 만들어야 합니다. 완전히 고유한 값이 포함된 단일 측정기준이 없는 경우 자체 기본 키 측정기준을 만들기 위해 필드를 연결해야 할 수도 있습니다.
row_number
를 사용하여 파생 테이블의 기본 키 생성
파생 테이블에서 이 오류가 발생하면 Postgres 및 Redshift 데이터베이스의 row_number()
윈도우 함수를 사용하여 고유한 필드를 만들 수 있습니다. 이 필드를 기본 키로 사용할 수 있습니다.
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 ;; } }
MySQL에서는 모든 행을 반복하는 변수를 사용하여 동일한 효과를 얻을 수 있습니다.
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 ;; } }
sql_distinct_key
의 잘못된 사용
쿼리의 측정값 중 하나라도 sum_distinct
유형이면 해당 측정값의 sql_distinct_key
매개변수와 sql
매개변수 사이에 고유성 불일치가 있을 수 있습니다.
빠른 해결 방법
이 매개변수의 요구사항은 sum_distinct
문서 페이지를 참조하세요.
팬아웃을 통해 여러 뷰에서 필드 참조
쿼리는 뷰 A의 측정값을 사용할 수 있지만 측정값은 뷰 B의 필드를 참조합니다. 이 경우 Looker는 뷰 A의 기본 키를 사용하여 해당 측정값을 계산합니다. 쿼리에 팬아웃이 포함된 경우 올바른 기본 키를 사용하지 못할 수 있습니다. (팬아웃에 대해 자세히 알아보려면 관련 커뮤니티 게시물을 확인하세요.)
빠른 해결 방법
이 문제를 해결하려면 sql_distinct_key
매개변수를 사용하여 뷰 B의 기본 키를 문제 측정값에 추가하세요.
나열된 원인 중 해당되는 사항이 없는데 오류가 계속 발생하는 경우
기본 키가 고유할 수 있는 매우 구체적인 상황이 있으며 이 문제의 다른 원인은 쿼리에 적용되지 않지만 이 오류는 계속 발생합니다. 첫째, 쿼리에 relationship: one_to_many
의 여러 조인이 포함되어 있습니다. 둘째, 쿼리의 측정값 중 하나가 여러 조인된 뷰의 값을 결합하는 측정기준을 참조합니다.
이 문제를 해결하려면 측정값을 기록한 후 다음 단계를 따르세요.
- 측정값 내에서 여러 조인된 뷰의 값을 결합하는 측정기준을 찾습니다.
- 해당 측정기준에서 참조되는 뷰를 찾습니다.
- SQL 언어의 연결 함수를 사용하여 이러한 뷰에서 기본 키를 연결합니다.
- 문제가 발생한 측정값의
sql_distinct_key
매개변수에 연결된 키를 배치합니다.