Looker에서 Relation Ship 지정 및 기본 키

개요


  • 모델에서 relation ship의 지정을 잘못했으므로, 비망을 위해 메모합니다.

  • 초보의 초보이므로, 자세한 분은 스루 해 주세요.

  • 실수


  • 아래와 같은 모델을 지정할 때, relation ship에는 무엇이 들어갈 것입니다.
  • 대답은 ManyTable(Multitable)에 대해 OneTable(1)을 JOIN하므로 many_to_one입니다.
  • 초보의 초보입니다만, 이것을, one_to_many 에 실수하면 무슨 일이 일어날까? 라는 이야기입니다.
  • explore: ManyTable{
      join:  OneTable{
        relationship: ????★ここ★????
        sql_on: ${ManyTable.joinkey} = ${OneTable.joinkey} ;;
      }
    }
    

    Relation Ship이란



    many_to_one



    관계성


  • 테이블 관계입니다. 예를 들어, 다음 테이블 Many/One을 고려하면
  • Many(다)에 대해서, One(1)의 관계성이므로, 다:1(many_to_one)인 것입니다.



  • LEFT JOIN과 건수 카운트


  • many_to_one에서 LEFT JOIN하면 이런 느낌이군요.
  • 이 조인시에 Many 측의 건수를 세려면, 조인한 테이블에 대해서, 단순히, count(*) 해 주면 되는 것입니다.
  • 다측이 좌표, 한편, LEFT JOIN이므로, count(*)로, A,B,C,D,E⇒5행으로 세어집니다.



  • one_to_many



    관계성


  • 조금 반대입니다. 일반적으로
  • many_to_one의 많은 (트랜잭션)을 왼쪽으로, 1 (마스터)을 오른쪽으로 가져오는 경우가 많다고 생각합니다.



  • LEFT JOIN과 건수 카운트


  • one_to_many에서 LEFT JOIN하면 이런 느낌입니다.
  • ONE 측이 왼쪽 테이블이므로 조인 할 수있는 레코드의 경우 왼쪽에 여러 번 나타납니다. (아래에서 말하는 A와 B)
  • 따라서 One 측의 레코드 수를 계산하려면 기본 키 (또는 후보 키)로 distinct하고 싶습니다.
  • 본건은, Looker 관계없이 여러가지 논의되고 있네요.
  • Count one-to-many using left join gives wrong count on source table
  • Prevent duplicate record counts in one to many query




  • Relation Ship 지정을 잘못하면


  • 처음에 언급했듯이 many_to_one (긍정)으로 지정해야하는 부분을 one_to_many (오)로 지정하면
  • LEFT JOIN의 건수 카운트로,
  • 사실, count (*) 및 pk를 사용하지 않고 건수를 계산할 수있는 처리에 대해
  • Looker는 count(distinct pk) 및 pk에서 중복 제거를 수행한 후 카운트를 시도합니다.

  • 그리고, 좌표측에, 주키(pk)의 지정이 없는 경우, 아래와 같은 에러를 출력합니다.
  • 왼쪽 표에 대해 pk를 요구하는 것이군요.

  • Field 'ManyTbl Count' cannot be calculated because of a one_to_many or many_to_many join. 
    Add a primary key to ManyTbl
    

    따라서


  • 초보의 초보입니다만, (당연합니다만,)
  • Relation Ship을 올바르게 지정합니다. (비망을 위해), 다시 한번, 모델 정의를 기재합니다. 아래입니다.

  • explore: ManyTable{
      join:  OneTable{
        relationship: many_to_one  # Manyに対する、Oneなので、many_to_one
        sql_on: ${ManyTable.joinkey} = ${OneTable.joinkey} ;;
      }
    }
    
  • 그 위에,
  • 원칙적으로 기본 키는 지정한다.
  • RDBMS에서 기본 키가 없으면 열 조합으로 복합 기본 키를 구성 할 수있는 경우 Looker에서 지정합니다.
  • 지정 방법은 Dealing with Non-Unique Primary Keys 에서 발췌합니다.


  • dimension: compound_primary_key {
      primary_key: yes
      hidden: yes
      type: string
      sql: CONCAT(${TABLE}.primary_key_1, ' ', ${TABLE}.primary_key_2) ;;
    }
    

    마지막으로


  • 초보의 초보의 실수로 부끄럽지만, 누군가의 도움이된다면,
  • 좋은 웹페이지 즐겨찾기