테이블의 필드 간 관계를 캡처하는 기본 키 제약 조건은 사용자와 도구가 데이터의 관계를 이해하는 데 도움이 될 수 있습니다. 이 문서에는 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에서 기본 키 및 외래 키 관계를 탐색하는 방법을 알아보려면 엔터티 관계 다이어그램 보기를 참조하세요.