데이터브릭스에서 물리뷰(Materialized View) 사용하기

GarionNachal·2025년 4월 21일
0

databricks

목록 보기
23/24
post-thumbnail

물리뷰(Materialized View)란?

물리뷰(Materialized View)는 원본 테이블의 쿼리 결과를 미리 계산하여 물리적으로 저장해둔 객체입니다. 일반 뷰(View)가 쿼리를 실행할 때마다 기본 테이블에서 데이터를 가져와 계산하는 것과 달리, 물리뷰는 쿼리 결과를 저장하고 있다가 사용자가 물리뷰를 조회할 때 저장된 결과를 반환합니다.

데이터브릭스 SQL에서 물리뷰는 Unity Catalog에서 관리되는 테이블로, 사용자가 소스 테이블의 최신 데이터를 기반으로 결과를 미리 계산할 수 있게 해줍니다. 데이터브릭스의 물리뷰는 다른 구현과 달리 물리뷰가 마지막으로 새로고침(refresh)되었을 때의 데이터 상태를 반영하며, 물리뷰를 쿼리할 때마다 결과를 항상 업데이트하지는 않습니다. 물리뷰는 수동으로 새로고침하거나 스케줄링하여 자동으로 새로고침할 수 있습니다.

물리뷰의 장점

  • 성능 향상: 복잡한 쿼리를 미리 계산해 두므로 실행 시간이 크게 단축됩니다.
  • 비용 절감: 자주 사용되는 계산을 미리 수행하여 컴퓨팅 리소스 사용량을 줄입니다.
  • 데이터 변환 간소화: 데이터 정리, 보강, 비정규화 작업을 쉽게 수행할 수 있습니다.
  • 증분 계산: 경우에 따라 기본 테이블의 변경 사항만 증분 방식으로 계산하여 효율성을 높입니다.

물리뷰의 작동 방식

데이터브릭스에서 물리뷰는 Delta Live Tables(DLT) 파이프라인을 통해 관리됩니다. 데이터브릭스 SQL 웨어하우스에서 물리뷰를 생성하면 자동으로 서버리스 DLT 파이프라인이 생성되어 물리뷰의 새로고침 프로세스를 처리합니다.

물리뷰의 작동 방식은 다음과 같습니다:

  1. 생성 단계: SQL 웨어하우스에서 물리뷰를 생성하면 초기 데이터 로드가 수행됩니다.
  2. DLT 파이프라인: 물리뷰마다 자동으로 서버리스 DLT 파이프라인이 생성됩니다.
  3. 새로고침 처리: 물리뷰를 새로고침하면 DLT 파이프라인이 작업을 처리합니다.
  4. 증분 업데이트: 가능한 경우 기본 테이블의 변경 사항만 증분 방식으로 처리합니다.

물리뷰 생성하기

물리뷰를 생성하려면 Unity Catalog가 활성화된 프로 또는 서버리스 SQL 웨어하우스를 사용해야 합니다. 또한 서버리스 파이프라인을 지원하는 워크스페이스가 필요합니다.

물리뷰를 생성하려면 CREATE MATERIALIZED VIEW 문을 사용합니다:

CopyCREATE MATERIALIZED VIEW mv1
AS SELECT
  date,
  sum(sales) AS sum_of_sales
FROM
  base_table1
GROUP BY
  date;

물리뷰를 생성하는 사용자는 물리뷰 소유자가 되며 다음 권한이 필요합니다:

  • 물리뷰가 참조하는 기본 테이블에 대한 SELECT 권한
  • 소스 테이블을 포함하는 카탈로그 및 스키마에 대한 USE CATALOG 및 USE SCHEMA 권한
  • 대상 카탈로그 및 스키마에 대한 USE CATALOG 및 USE SCHEMA 권한
  • 물리뷰를 포함하는 스키마에 대한 CREATE TABLE 및 CREATE MATERIALIZED VIEW 권한

기본 테이블의 열 주석(comment)은 새 물리뷰에 자동으로 전파됩니다. 스케줄, 테이블 제약 조건 또는 기타 속성을 추가하려면 물리뷰 정의를 수정하면 됩니다.

물리뷰 새로고침(Refresh)

물리뷰는 REFRESH MATERIALIZED VIEW 문을 사용하여 기본 테이블의 최신 변경 사항을 반영하도록 업데이트할 수 있습니다:

CopyREFRESH MATERIALIZED VIEW mv1;

기본적으로 새로고침 작업은 동기적으로 수행되지만, 비동기적으로 수행하도록 설정할 수도 있습니다:

CopyREFRESH MATERIALIZED VIEW mv1 ASYNC;

동기식 vs 비동기식 새로고침

  • 동기식: 새로고침이 완료될 때까지 다른 작업이 진행되지 않습니다. 다음 단계에서 결과가 필요한 경우 동기식 새로고침을 사용합니다.
  • 비동기식: 물리뷰 새로고침이 시작되면 DLT 컴퓨팅에서 백그라운드 작업이 시작되어 명령이 데이터 로드를 완료하기 전에 반환되도록 합니다. 이 방식은 비용을 절약할 수 있으며, 명령이 시작된 웨어하우스의 컴퓨팅 용량을 반드시 유지할 필요가 없습니다.

증분 새로고침

일부 쿼리는 증분 방식으로 새로고침할 수 있습니다. 증분 새로고침이 불가능한 경우 전체 새로고침이 대신 수행됩니다. 증분 새로고침을 지원하는 쿼리 유형에 대한 자세한 내용은 Incremental refresh for materialized views 문서를 참조하세요.

물리뷰 스케줄링

물리뷰는 정의된 일정에 따라 자동으로 새로고침하도록 구성할 수 있습니다. 일정을 설정하는 방법은 두 가지가 있습니다:

  1. 물리뷰를 생성할 때 SCHEDULE 절을 사용:
CopyCREATE MATERIALIZED VIEW mv1
SCHEDULE ON CRON '0 0 * * *' -- 매일 자정에 새로고침
AS SELECT
  date,
  sum(sales) AS sum_of_sales
FROM
  base_table1
GROUP BY
  date;
  1. ALTER MATERIALIZED VIEW 문을 사용하여 기존 물리뷰에 일정 추가:
CopyALTER MATERIALIZED VIEW mv1
SET SCHEDULE ON CRON '0 0 * * *';

일정이 생성되면 업데이트를 처리하기 위한 새로운 데이터브릭스 작업이 자동으로 구성됩니다.

일정을 확인하려면 다음 중 하나를 수행할 수 있습니다:

  • SQL 편집기에서 DESCRIBE EXTENDED 문 실행
  • Catalog Explorer를 사용하여 물리뷰 확인 (개요 탭의 '새로고침 상태' 아래에 일정이 표시됨)

물리뷰 접근 제어

물리뷰는 데이터 공유를 지원하면서 잠재적으로 민감한 데이터가 노출되는 것을 방지하기 위한 풍부한 접근 제어를 지원합니다. 물리뷰 소유자 또는 MANAGE 권한이 있는 사용자는 다른 사용자에게 SELECT 권한을 부여할 수 있습니다.

물리뷰에 권한 부여

물리뷰에 대한 접근 권한을 부여하려면 GRANT 문을 사용합니다:

CopyGRANT privilege_type [, privilege_type ] ...
ON <mv_name> TO principal;

권한 유형은 다음과 같습니다:

  • SELECT: 사용자가 물리뷰를 조회할 수 있습니다.
  • REFRESH: 사용자가 물리뷰를 새로고침할 수 있습니다. 새로고침은 소유자의 권한으로 실행됩니다.

예시:

CopyCREATE MATERIALIZED VIEW <mv_name> AS SELECT * FROM <base_table>;
GRANT SELECT ON <mv_name> TO user;
GRANT REFRESH ON <mv_name> TO user;

물리뷰에서 권한 취소

물리뷰에서 접근 권한을 취소하려면 REVOKE 문을 사용합니다:

CopyREVOKE privilege_type [, privilege_type ]
ON <mv_name> FROM principal;

물리뷰 모니터링 및 관리

물리뷰 새로고침의 상태를 모니터링하고 관리하는 여러 방법이 있습니다.

새로고침 상태 확인

물리뷰 새로고침의 상태를 확인하려면 다음 방법을 사용할 수 있습니다:

  1. DLT UI에서 물리뷰를 관리하는 파이프라인을 확인합니다.
  2. 물리뷰에 대한 DESCRIBE EXTENDED 명령이 반환하는 새로고침 정보를 확인합니다.
  3. DLT 이벤트 로그를 쿼리하여 물리뷰의 새로고침 기록을 확인합니다:
CopySELECT *
FROM event_log(TABLE(<fully-qualified-table-name>))
WHERE event_type = "update_progress"
ORDER BY timestamp desc;

<fully-qualified-table-name>을 카탈로그 및 스키마를 포함한 물리뷰의 정규화된 이름으로 대체합니다.

쿼리 기록을 사용한 실행 모니터링

쿼리 기록 페이지를 사용하여 쿼리 세부 정보와 쿼리 프로필에 접근할 수 있으며, 이를 통해 성능이 좋지 않은 쿼리와 스트리밍 테이블 업데이트를 실행하는 데 사용되는 DLT 파이프라인의 병목 현상을 식별할 수 있습니다.

쿼리 기록 UI에서 REFRESH 문에 접근하려면 다음 단계를 따르세요:

  1. 왼쪽 사이드바에서 History 아이콘을 클릭하여 쿼리 기록 UI를 엽니다.
  2.  드롭다운 필터에서 REFRESH 체크박스를 선택합니다.
  3. 쿼리 문의 이름을 클릭하여 쿼리 기간 및 집계된 메트릭과 같은 요약 세부 정보를 확인합니다.
  4. 쿼리 프로필 보기를 클릭하여 쿼리 프로필을 엽니다.
  5. 선택적으로 쿼리 소스 섹션의 링크를 사용하여 관련 쿼리나 파이프라인을 엽니다.

활성 새로고침 중지

DLT UI에서 활성 새로고침을 중지하려면 파이프라인 세부 정보 페이지에서 중지를 클릭하여 파이프라인 업데이트를 중지합니다. 또한 Databricks CLI 또는 Pipelines API의 POST /api/2.0/pipelines/{pipeline_id}/stop 작업을 사용하여 새로고침을 중지할 수 있습니다.

모범 사례와 제한사항

모범 사례

  1. 증분 새로고침 활용: 가능한 경우 증분 새로고침을 사용하여 성능을 최적화하고 비용을 절감합니다.
  2. 적절한 새로고침 빈도 선택: 데이터 업데이트 빈도와 쿼리 패턴에 따라 최적의 새로고침 일정을 설정합니다.
  3. 변경 데이터 피드(CDF) 활성화: 증분 새로고침을 위해 기본 테이블에서 변경 데이터 피드를 활성화합니다.
  4. 적절한 접근 제어 설정: 민감한 데이터에 대한 접근을 제한하기 위해 접근 제어를 신중하게 구성합니다.

제한사항

데이터브릭스 물리뷰에는 다음과 같은 제한사항이 있습니다:

  1. 컴퓨팅 및 워크스페이스 요구 사항을 충족해야 합니다.
  2. 물리뷰는 ID 열이나 대리 키를 지원하지 않습니다.
  3. NULL이 가능한 열에 대해 합계 집계를 사용하는 물리뷰에서 해당 열에 NULL 값만 남아 있는 경우, 물리뷰의 결과 집계 값은 NULL 대신 0이 됩니다.
  4. 물리뷰에서 변경 데이터 피드를 읽을 수 없습니다.
  5. 시간 이동(Time travel) 쿼리는 물리뷰에서 지원되지 않습니다.
  6. 물리뷰를 지원하는 기본 파일에는 물리뷰 정의에 표시되지 않는 업스트림 테이블의 데이터(개인 식별 정보 포함 가능)가 포함될 수 있습니다.

실제 사용 사례

물리뷰는 다양한 데이터 처리 시나리오에서 유용하게 활용될 수 있습니다:

1. ETL 처리 간소화

물리뷰는 추출, 변환, 로드(ETL) 처리를 위한 간단하고 선언적인 방법을 제공합니다. 다음 예시에서는 일별 판매 데이터를 집계하는 물리뷰를 만듭니다:

CopyCREATE MATERIALIZED VIEW daily_sales_summary
AS SELECT
  date,
  product_category,
  region,
  sum(sales_amount) AS total_sales,
  count(distinct customer_id) AS unique_customers
FROM
  sales_transactions
GROUP BY
  date, product_category, region;

2. 데이터 정리 및 보강

물리뷰를 사용하여 데이터를 정리하고 보강할 수 있습니다:

CopyCREATE MATERIALIZED VIEW enriched_customer_data
AS SELECT
  c.customer_id,
  c.name,
  c.email,
  c.signup_date,
  d.country,
  d.city,
  d.postal_code,
  CASE WHEN o.total_orders > 10 THEN 'VIP' ELSE 'Regular' END AS customer_segment
FROM
  customers c
JOIN
  demographics d ON c.customer_id = d.customer_id
JOIN
  (SELECT customer_id, COUNT(*) AS total_orders FROM orders GROUP BY customer_id) o
  ON c.customer_id = o.customer_id;

3. 자주 사용되는 연산 최적화

물리뷰를 통해 자주 사용되는 복잡한 연산을 최적화할 수 있습니다:

CopyCREATE MATERIALIZED VIEW product_performance_metrics
AS SELECT
  p.product_id,
  p.product_name,
  p.category,
  COUNT(o.order_id) AS order_count,
  SUM(o.quantity) AS total_quantity_sold,
  SUM(o.quantity * o.unit_price) AS total_revenue,
  AVG(r.rating) AS average_rating
FROM
  products p
LEFT JOIN
  order_items o ON p.product_id = o.product_id
LEFT JOIN
  product_reviews r ON p.product_id = r.product_id
GROUP BY
  p.product_id, p.product_name, p.category;

4. 규정 준수 및 감사

물리뷰를 사용하여 규정 준수 및 감사 목적으로 데이터를 처리할 수 있습니다:

CopyCREATE MATERIALIZED VIEW gdpr_compliance_log
AS SELECT
  action_type,
  user_id,
  data_category,
  action_timestamp,
  requesting_user,
  approval_status,
  COUNT(*) AS action_count
FROM
  data_access_logs
WHERE
  action_timestamp >= current_date - INTERVAL 90 DAY
GROUP BY
  action_type, user_id, data_category, action_timestamp, requesting_user, approval_status;

결론

데이터브릭스의 물리뷰(Materialized View)는 데이터 처리 워크로드를 최적화하고 분석 성능을 향상시키는 강력한 기능입니다. 복잡한 쿼리의 결과를 미리 계산하여 저장함으로써 쿼리 지연 시간을 줄이고 비용을 절감할 수 있습니다. 또한 Delta Live Tables(DLT)와 통합되어 자동으로 새로고침을 관리하기 때문에 사용자는 데이터 파이프라인 관리에 대한 부담을 줄일 수 있습니다.

물리뷰는 ETL 처리, 데이터 정리 및 보강, 자주 사용되는 연산 최적화, 규정 준수 및 감사 등 다양한 사용 사례에서 유용하게 활용될 수 있습니다. 데이터브릭스의 물리뷰를 효과적으로 활용하여 데이터 처리 워크로드를 간소화하고 성능을 최적화해 보세요.


참고 자료

profile
AI를 꿈꾸는 BackEnd개발자

0개의 댓글