오류: 고유하지 않은 값/기본 키(또는 sql_distinct_key), 합계 계산 시 값 오버플로 또는 충돌

이 페이지는 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의 여러 조인이 포함되어 있습니다. 둘째, 쿼리의 측정값 중 하나가 여러 조인된 뷰의 값을 결합하는 측정기준을 참조합니다.

이 문제를 해결하려면 측정값을 기록한 후 다음 단계를 따르세요.

  1. 측정값 내에서 여러 조인된 뷰의 값을 결합하는 측정기준을 찾습니다.
  2. 해당 측정기준에서 참조되는 뷰를 찾습니다.
  3. SQL 언어의 연결 함수를 사용하여 이러한 뷰에서 기본 키를 연결합니다.
  4. 문제가 발생한 측정값의 sql_distinct_key 매개변수에 연결된 키를 배치합니다.