다음을 통해 공유


Azure Databricks에서 조인 작업하기

Databricks는 ANSI 표준 조인 구문을 지원합니다. 이 문서에서는 일괄 처리와 스트림 처리를 사용하는 조인 간의 차이점을 설명하고 조인 성능을 최적화하기 위한 몇 가지 권장 사항을 제공합니다.

참고 항목

Databricks는 집합 연산자 UNION, INTERSECTEXCEPT에 대한 표준 구문도 지원합니다. 연산자 집합을 참조하세요.

스트리밍과 일괄 조인의 차이점

Azure Databricks의 조인은 상태 저장 또는 상태 비저장입니다.

모든 일괄 처리 조인은 상태 비정상 조인입니다. 결과는 즉시 처리되고 쿼리가 실행될 때 데이터를 반영합니다. 쿼리가 실행될 때마다 지정된 원본 데이터를 기반으로 새 결과가 계산됩니다. Batch 조인을 참조하세요.

두 스트리밍 데이터 원본 간의 조인은 상태 저장입니다. 상태 저장 조인에서 Azure Databricks는 데이터 원본 및 결과에 대한 정보를 추적하고 결과를 반복적으로 업데이트합니다. 상태 저장 조인은 온라인 데이터 처리를 위한 강력한 솔루션을 제공할 수 있지만 효과적으로 구현하기는 어려울 수 있습니다. 출력 모드, 트리거 간격 및 워터마크에 따라 복잡한 운영 의미 체계가 있습니다. 스트림 스트림 조인을 참조하세요.

스트림 정적 조인은 상태 비 상태이지만 증분 데이터 원본(예: 팩트 테이블)을 정적 데이터 원본(예: 느리게 변화하는 차원 테이블)과 조인하는 데 적합한 옵션을 제공합니다. 쿼리가 실행될 때마다 양쪽의 모든 레코드를 조인하는 대신 스트리밍 원본에서 새로 받은 레코드만 현재 버전의 정적 테이블과 조인됩니다. Stream-static 조인을 참조하세요.

일괄 처리 조인

Azure Databricks는 내부, 외부, 세미, 안티 및 교차 조인을 비롯한 표준 SQL 조인 구문을 지원합니다. JOIN을 참조하세요.

참고 항목

Databricks는 구체화된 뷰를 사용하여 내부 조인 결과의 증분 계산을 최적화하는 것이 좋습니다. Databricks SQL에서 구체화된 뷰 사용을 참조하세요.

스트림-스트림 조인

두 스트리밍 데이터 원본을 조인하면 상태 정보 관리 및 결과 계산 및 출력에 대한 추론에 상당한 문제가 발생할 수 있습니다. 스트림 스트림 조인을 구현하기 전에 Databricks는 워터마크가 상태 관리에 미치는 영향을 포함하여 상태 저장 스트리밍에 대한 운영 의미 체계에 대한 강력한 이해를 개발할 것을 권장합니다. 다음 문서를 참조하세요.

Databricks는 모든 스트림 증기 조인의 양쪽에 워터마크를 지정하는 것이 좋습니다. 지원되는 조인 유형은 다음과 같습니다:

  • Inner Join
  • 왼쪽 우선 외부 조인
  • 오른쪽 우선 외부 조인
  • 완전 외부 조인
  • 왼쪽 세미 조인

Stream-steam 조인에 대한 Apache Spark 구조적 스트리밍 설명서를 참조하세요.

스트림 정적 조인

참고 항목

스트림 정적 조인에 대해 설명된 동작은 정적 데이터가 Delta Lake를 사용하여 저장된다고 가정합니다.

스트림 정적 조인은 상태 비저장 조인을 사용하여 Delta 테이블(정적 데이터)의 유효한 최신 버전을 데이터 스트림에 조인합니다.

Azure Databricks에서 스트림 정적 조인의 데이터 마이크로 일괄 처리를 수행하면 정적 Delta 테이블의 유효한 최신 데이터 버전이 현재 마이크로 일괄 처리에 있는 레코드와 조인됩니다. 상태 비저장 조인이므로 워터마크를 구성할 필요가 없으며 짧은 대기 시간으로 결과를 처리할 수 있습니다. 조인에 사용되는 정적 Delta 테이블의 데이터는 천천히 변경되어야 합니다.

다음 예에서는 이러한 패턴을 보여 줍니다.

streamingDF = spark.readStream.table("orders")
staticDF = spark.read.table("customers")

query = (streamingDF
  .join(staticDF, streamingDF.customer_id==staticDF.id, "inner")
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .table("orders_with_customer_info")
)

조인 성능 최적화

Photon을 사용하도록 설정된 컴퓨팅은 항상 최상의 조인 유형을 선택합니다. Photon이란?을 참조하세요.

Photon이 활성화된 최신 Databricks 런타임 버전을 사용하면 일반적으로 좋은 조인 성능을 제공하지만 다음 권장 사항도 고려해야 합니다.

  • 교차 조인은 매우 비쌉니다. 짧은 대기 시간 또는 빈번한 재계산이 필요한 워크로드 및 쿼리에서 교차 조인을 제거합니다.

  • 조인 순서가 중요합니다. 여러 조인을 수행할 때는 항상 가장 작은 테이블을 먼저 조인한 다음 결과를 더 큰 테이블과 조인합니다.

  • 최적화 프로그램은 많은 조인 및 집계가 있는 쿼리에서 어려움을 겪을 수 있습니다. 중간 결과를 저장하면 쿼리 계획 및 컴퓨팅 결과를 가속화할 수 있습니다.

  • 성능을 향상시키기 위해 새로운 통계를 유지합니다. (공개 미리 보기)를 사용한 예측 최적화 ANALYZE 는 통계를 자동으로 업데이트하고 유지 관리할 수 있습니다. 쿼리를 실행하여 쿼리 ANALYZE TABLE table_name COMPUTE STATISTICS 플래너에서 통계를 업데이트할 수도 있습니다.

Important

예측 최적화 ANALYZE 는 공개 미리 보기로 제공됩니다. 여기에는 쓰기 중에 지능형 통계 수집이 포함됩니다. 공개 미리 보기에 등록하려면 이 양식을 사용합니다.

참고 항목

Databricks Runtime 14.3 LTS 이상에서는 Delta Lake가 데이터 건너뛰기를 위해 통계를 수집하는 열을 수정한 다음 델타 로그에서 기존 통계를 다시 계산할 수 있습니다. 델타 통계 열 지정을 참조 하세요.

Azure Databricks에 대한 조인 힌트

Apache Spark는 범위 조인 및 기울이기 조인에 대한 조인 힌트 지정을 지원합니다. Azure Databricks가 이러한 조인을 자동으로 최적화하기 때문에 기울이기 조인에 대한 힌트는 필요하지 않습니다. 힌트를 참조하세요.

범위 조인에 대한 힌트는 조인 성능이 저하되고 같지 않은 조인을 수행하는 경우에 유용할 수 있습니다. 예를 들어 타임스탬프 범위 또는 클러스터링 ID 범위에 대한 조인이 있습니다. 범위 조인 최적화를 참조하세요.