Azure Databricks에서 낮은 셔플 병합
메모
낮은 셔플 병합은 Databricks Runtime 10.4 LTS 및 이후 버전에서 일반 공급(GA) 되고 있으며, Databricks Runtime 9.1 LTS에서는 공개 미리 보기 로 제공됩니다. Databricks는 프리뷰 고객이 Databricks Runtime 10.4 LTS 이상으로 마이그레이션하는 것이 좋습니다.
MERGE 명령은 Delta Lake table에서 동시에 업데이트, 삽입 및 삭제 작업을 수행하는 데 사용됩니다. Azure Databricks에는 일반적인 워크로드의 성능을 크게 향상시키는 MERGE
의 최적화된 구현이 있으며, 이는 순서 섞기 작업의 수를 줄임으로써 달성됩니다.
Databricks의 적은 셔플 병합은 수정된 행과 달리 수정되지 않은 행들을 별도의 간소화된 처리 모드에서 처리하여 성능을 향상시킵니다. 결과적으로 섞인 데이터의 양이 크게 감소하여 성능이 향상됩니다. 낮은 셔플 병합을 사용하면 사용자가 MERGE
작업을 수행한 후 OPTIMIZE ZORDER BY 명령을 다시 실행해야 할 필요성이 줄어듭니다.
최적화된 성능
많은 MERGE
워크로드는 table에서 비교적 적은 수의 행만 update. 그러나 델타 tables 파일별로만 업데이트할 수 있습니다. 필 요할 때, MERGE
명령은 특정 파일에 저장된 적은 수의 행을 update하거나 삭제해야 하면, 수정되지 않은 경우에도 동일한 파일에 저장된 나머지 모든 행을 처리하고 새로 작성해야 합니다. **
Low Shuffle Merge는 수정되지 않은 행의 처리를 최적화합니다. 이전에는 수정된 행과 동일한 방식으로 처리되어 여러 셔플 단계와 비용이 많이 드는 계산을 거쳤습니다. 낮은 순서 섞기 병합에서 수정되지 않은 행은 순서 섞기, 비용이 많이 드는 처리 또는 기타 추가 오버헤드 없이 처리됩니다.
최적화된 데이터 레이아웃
실행 속도가 빨라질 뿐만 아니라, 낮은 셔플 병합은 후속 작업에도 긍정적인 영향을 줍니다. 이전 MERGE
구현으로 인해 수정되지 않은 데이터의 데이터 레이아웃이 완전히 변경되어 후속 작업에서 성능이 저하되었습니다. 낮은 순서 병합은 수정되지 않은 레코드의 기존 데이터 레이아웃을 최상의 노력을 다해 보존하려고 하며, 여기에는 Z 순서 최적화도 포함됩니다. 따라서 낮은 셔플 병합을 사용하면 하나 이상의 MERGE
명령을 실행한 후 Delta table 작업의 성능 저하 속도가 더욱 완만해집니다.
메모
낮은 순서 섞기 병합은 수정되지 않은 기존 데이터에 대한 데이터 레이아웃을 유지하려고 합니다. 업데이트되거나 새로 삽입된 데이터의 데이터 레이아웃이 최적이 아닐 수 있으므로 여전히 OPTIMIZE
또는 OPTIMIZE 명령과 ZORDER BY 명령을 실행해야 할 수 있습니다.
가용도
낮은 셔플 병합은 Databricks Runtime 10.4 이상에서 기본 설정으로 사용 가능합니다. 이전의 지원된 Databricks 런타임 버전에서는 구성 spark.databricks.delta.merge.enableLowShuffle
에서 true
로 설정하여 사용할 수 있도록 설정할 수 있습니다. 이 플래그는 Databricks Runtime 10.4 이상에는 영향을 주지 않습니다.