파생 테이블의 SQL 개념

LookML 뷰는 일반적으로 데이터베이스 내의 기존 테이블을 기반으로 하지만 SQL SELECT 문 기반의 뷰를 만들 수도 있습니다. Looker에서는 이러한 유형의 뷰를 파생 테이블이라고 합니다. 파생 테이블은 결과가 데이터베이스의 실제 테이블인 것처럼 사용되는 쿼리입니다.

이 가이드에서는 다음 주제에 대해 알아봅니다.

파생 테이블에 대한 Looker의 SQL 생성 방법

Looker에서 LookML로 파생 테이블을 쿼리할 때 Looker는 사용자 쿼리를 언어에 따라 공통 테이블 표현식(CTE) 또는 인라인 뷰로 형식이 지정되는 SQL 문으로 변환합니다. 즉, 생성된 SQL 쿼리가 다음 예시 중 하나와 비슷할 수 있습니다.

다음 예시는 Looker가 CTE를 사용하여 파생 테이블을 쿼리하는 SQL 쿼리를 생성하는 방법을 보여줍니다.

WITH (
    SELECT o.user_id as id
    FROM orders AS o
    INNER JOIN order_items AS oi ON o.id == oi.order_id
    ORDER BY SUM(oi.total_sale_price) DESC
    GROUP BY o.customer_id
    LIMIT 100
    ) AS top_100_users
SELECT ...
FROM users AS u
INNER JOIN top_100_users ON u.id == top_100_users.id
WHERE ...

다음 예시는 Looker가 인라인 뷰를 사용해서 파생 테이블을 쿼리하는 SQL 쿼리를 생성하는 방법을 보여줍니다.

SELECT ...
FROM users AS u
INNER JOIN (
    SELECT o.user_id as id
    FROM orders AS o
    INNER JOIN order_items AS oi ON o.id == oi.order_id
    ORDER BY SUM(oi.total_sale_price) DESC
    GROUP BY o.customer_id
    LIMIT 100
    ) AS top_100_users ON u.id == top_100_users.id
WHERE ...

SQL 기반 파생 테이블

SQL 기반 파생 테이블을 만들려면 뷰의 derived_table 매개변수 내에 sql 매개변수를 사용하여 LookML 내에서 직접 SQL 쿼리를 정의합니다. 이렇게 하면 SQL을 사용하여 파생 테이블의 열을 정의할 수 있습니다.

예를 들어 다음 샘플 LookML은 모든 주문 중에서 총 지출액이 가장 높은 상위 100명의 사용자를 식별하는 top_100_users라는 파생 테이블을 정의합니다.

view: top_100_users {
  derived_table: {
    sql: SELECT o.user_id as id
         FROM orders AS o
         INNER JOIN order_items AS oi ON o.id == oi.order_id
         ORDER BY SUM(oi.total_sale_price) DESC
         GROUP BY o.customer_id
         LIMIT 100 ;;
  }

  dimension: id {
    type: number
    sql: ${TABLE}.id ;;
  }
}

Explore 쿼리에서 top_100_users 뷰가 참조될 때 Looker는 언어에 따라 생성된 SQL에서 이 SQL SELECT 문을 CTE 또는 인라인 뷰로 사용합니다.

SQL을 사용하여 파생 테이블을 정의할 때는 일부 제한이 포함될 수 있습니다. 예를 들어 SQL 기반 파생 테이블 섹션의 예시에는 다음 고려사항이 적용됩니다.

  • ordersorder_items 테이블 사이의 관계는 일반적으로 LookML 모델에 이미 정의되었을 수 있습니다. 데이터베이스에서 기본 테이블 이름이 변경되면 SQL 기반 파생 테이블 정의를 포함하여 테이블 이름을 여러 위치에서 업데이트해야 합니다.
  • 파생 테이블 정의의 SQL은 기본 데이터베이스에 대해 올바른 언어로 표시해야 합니다. 데이터를 다른 데이터베이스로 이동할 경우 SQL 기반 파생 테이블의 정의를 변경해야 합니다.

따라서 기본 파생 테이블이 더 나은 옵션일 수 있습니다.

기본 파생 테이블

Looker에서 기본 파생 테이블은 LookML로 정의됩니다. SQL 기반 파생 테이블 사용과 달리 기본 파생 테이블을 정의할 때는 다음과 같이 LookML 모델을 활용합니다.

  • 데이터베이스에서 테이블 이름이 변경된 경우 LookML 모델에서 한 번만 업데이트하면 됩니다. 기본 파생 테이블은 데이터베이스 테이블이 정의된 기존 LookML 객체에 연결되기 때문에 기본 파생 테이블이 자동으로 적합한 테이블을 참조합니다.
  • 마찬가지로 다른 언어로 이동하더라도 Looker가 데이터베이스 연결에 적합한 SQL을 생성하기 때문에 기본 파생 테이블에 대한 LookML이 계속 유효합니다.

기본 파생 테이블에 대해 LookML을 수동으로 정의할 수 있습니다. 하지만 기본 파생 테이블을 만드는 가장 쉬운 방법은 Looker가 Explore 쿼리에서 파생 테이블을 만들도록 설정하는 것입니다. Explore에서 파생 테이블에 사용하려는 필드를 선택하고 Explore 톱니바퀴 메뉴에서 LookML 가져오기 > 파생 테이블 옵션을 사용하여 LookML을 가져옵니다. Looker는 파생 테이블의 열을 만드는 데 필요한 LookML 모델의 관련 필드 정의를 포함하여 Explore 쿼리에서 파생 테이블을 만들기 위해 필요한 LookML을 생성합니다. LookML을 프로젝트의 뷰 파일에 복사하여 파생 테이블을 만들 수 있습니다.

다음 예시는 모든 주문 중 총 지출액이 가장 높은 상위 100명의 사용자를 식별하는 기본 파생 테이블을 보여줍니다.

view: top_100_users {
  derived_table: {
    explore_source:  orders {
      column: id {
        field: orders.customer_id
      }
      sorts: [order_items.sum_total_sale_price desc]
      limit: 100
    }
  }
}

Explore에서 기본 파생 테이블을 쿼리하면 기본 파생 테이블에 대해 SQL 쿼리의 모든 세부정보가 자동으로 생성됩니다. 기본 파생 테이블의 LookML 뷰 열 정의는 기본 Explore 정의에서 추론되므로 정의를 반복할 필요가 없습니다.

영구 파생 테이블(PDT)

Looker에서는 임시 파생 테이블영구 파생 테이블을 모두 만들 수 있습니다. SQL 기반 파생 테이블 또는 기본 파생 테이블을 만든 후에는 Looker가 데이터베이스의 스크래치 스키마에 테이블을 기록하고 지정한 일정에 따라 재생성하도록 영구 설정을 추가할 수 있습니다. 자세한 내용은 Looker의 파생 테이블을 참조하세요.