다음을 통해 공유


기본 키 제약 조건을 사용하여 쿼리 최적화

테이블의 필드 간 관계를 캡처하는 기본 키 제약 조건은 사용자와 도구가 데이터의 관계를 이해하는 데 도움이 될 수 있습니다. 이 문서에는 RELY 옵션과 함께 기본 키를 사용하여 몇 가지 일반적인 유형의 쿼리를 최적화하는 방법을 보여 주는 예제가 포함되어 있습니다.

메모

쿼리의 최적화가 RELY 명령과 연결될 때, Photon을 지원하는 컴퓨팅 환경에서 쿼리를 실행해야 합니다. Photon이란?을 참조하세요. Photon은 기본적으로 SQL 웨어하우스에서 실행되고 Notebook 및 워크플로에 대한 서버리스 컴퓨팅이 실행됩니다. Photon에 대해 자세히 알아보려면 Photon이란 무엇인가요?를 참조하세요.

:::

:::

기본 키 제약 조건 추가

다음 예제와 같이 테이블 만들기 문에 기본 키 제약 조건을 추가하거나 ADD CONSTRAINT 절을 사용하여 테이블에 제약 조건을 추가할 수 있습니다.

CREATE TABLE customer (
  c_customer_sk int,
  PRIMARY KEY (c_customer_sk)
  ...
  )

이 예제에서는 c_customer_sk 고객 ID 키입니다. 기본 키 제약 조건은 각 고객 ID 값이 테이블에서 고유해야 하므로 지정합니다. Azure Databricks는 키 제약 조건을 적용하지 않습니다. 기존 데이터 파이프라인 또는 ETL을 통해 유효성을 검사할 수 있습니다. 스트리밍 테이블 및 구체화된 뷰의 작업 기대치에 대해 알아보려면 파이프라인 기대치로 데이터 품질 관리을 참조하세요. 델타 테이블에서 제약 조건을 사용하는 방법에 대한 자세한 내용은 Azure Databricks 제약 조건을 참조하세요.

메모

제약 조건이 충족되는지 여부를 확인하는 것은 사용자의 책임입니다. 충족되지 않는 제약 조건에 의존하면 잘못된 쿼리 결과가 발생할 수 있습니다.

최적화를 사용하도록 설정하는 데 사용 RELY

기본 키 제약 조건이 유효하다는 것을 알고 있는 경우 RELY 옵션으로 지정하여 제약 조건에 따라 최적화를 사용하도록 설정할 수 있습니다. 전체 구문은 ADD CONSTRAINT 절 참조하세요.

RELY 옵션을 사용하면 Azure Databricks가 제약 조건을 악용하여 쿼리를 다시 작성할 수 있습니다. 다음 최적화는 절 또는 RELY 문에 ADD CONSTRAINT 옵션이 지정된 경우에만 ALTER TABLE 수행할 수 있습니다.

ALTER TABLE을 사용하여 테이블의 기본 키를 수정하고, RELY 옵션을 포함하도록 할 수 있습니다. 다음 예제를 참고하세요.


ALTER TABLE
  customer DROP PRIMARY KEY;
ALTER TABLE
  customer
ADD
  PRIMARY KEY (c_customer_sk) RELY;

최적화 예제

다음 예제는 이전 예제를 확장하여, customer 옵션이 지정된 c_customer_sk라는 이름의 확인된 고유 식별자인 PRIMARY KEY이 포함된 RELY 테이블을 만듭니다.

예제 1: 불필요한 집계 제거

다음은 기본 키에 작업을 적용 DISTINCT 하는 쿼리를 보여 줍니다.

SELECT
  DISTINCT c_customer_sk
FROM
  customer;

c_customer_sk 열은 확인된 PRIMARY KEY 제약 조건이므로 열의 모든 값은 고유합니다. RELY 옵션을 지정하면 Azure Databricks는 DISTINCT 작업을 수행하지 않고 쿼리를 최적화할 수 있습니다.

예제 2: 불필요한 조인 제거

다음 예제에서는 Azure Databricks가 불필요한 조인을 제거할 수 있는 쿼리를 보여 줍니다.

쿼리는 팩트 테이블 store_sales을(를) 차원 테이블 customer과 조인합니다. 왼쪽 외부 조인을 수행하므로 쿼리 결과에는 store_sales 테이블의 모든 레코드와 customer 테이블의 일치하는 레코드가 포함됩니다. customer 테이블에 일치하는 레코드가 없으면 쿼리 결과에 NULL 열에 대한 c_customer_sk 값이 표시됩니다.

SELECT
  SUM(ss_quantity)
FROM
  store_sales ss
  LEFT JOIN customer c ON ss.customer_sk = c.c_customer_sk;

이 조인이 필요하지 않은 이유를 이해하려면 쿼리 문을 고려하세요. ss_quantity 테이블의 store_sales 열만 필요합니다. customer 테이블은 기본 키에 조인되므로 store_sales 각 행은 customer최대 한 행과 일치합니다. 작업은 외부 조인이므로 store_sales 테이블의 모든 레코드가 유지되므로 조인은 해당 테이블의 데이터를 변경하지 않습니다. SUM 집계는 테이블이 조인되었는지와 상관없이 동일합니다.

RELY 기본 키 제약 조건을 사용하면 쿼리 최적화 프로그램에서 조인을 제거하는 데 필요한 정보를 얻을 수 있습니다. 최적화된 쿼리는 다음과 같습니다.

SELECT
  SUM(ss_quantity)
FROM
  store_sales ss

다음 단계

카탈로그 탐색기 UI에서 기본 키 및 외래 키 관계를 탐색하는 방법을 알아보려면 엔터티 관계 다이어그램 보기를 참조하세요.