Lakehouse 및 Delta Lake 테이블 형식은 Microsoft Fabric 중심입니다. 델타 테이블을 최적화된 상태로 유지하는 것은 분석 워크로드의 성능 및 비용 효율성의 핵심입니다.
이 문서에서는 V-Order를 사용할 시기를 결정하고 델타 테이블의 기본 구성 및 유지 관리 패턴을 보여 줍니다.
이 문서의 사용 용도:
- V-Order의 변경 내용과 도움이 되는 시기를 이해합니다.
- Z-Order와 V-Order가 서로를 어떻게 보완하는지 이해합니다.
- 올바른 컨트롤 수준(세션, 테이블 속성 또는 쓰기 작업)을 선택합니다.
- 올바른 Spark 런타임 컨텍스트에서 델타 테이블 유지 관리 패턴을 적용합니다.
사용 시나리오에 따라 V-Order를 적용하는 시기에 대한 워크로드 간 지침은 워크로드 간 테이블 유지 관리 및 최적화를 참조하세요.
V-Order란?
V-Order는 패브릭 엔진에서 다운스트림 쿼리 성능을 향상시킬 수 있는 Parquet 파일에 대한 쓰기 시간 최적화입니다.
한눈에 보기:
- 가장 도움이 되는 위치: 대시보드, 대화형 분석 및 반복 검색과 같은 읽기가 많은 패턴입니다.
- 도움이 되는 방법: Parquet 레이아웃(예: 행 그룹 배포, 인코딩 및 압축)을 재구성하여 읽기 효율성을 개선합니다.
- 일반적인 절충: 쓰기는 더 오래 걸릴 수 있지만(평균 약 15%), 읽기는 워크로드에 따라 크게 향상될 수 있습니다.
- 엔진 호환성: 파일은 오픈 소스 Parquet 규격으로 유지되며 Z-Order와 같은 델타 기능은 호환됩니다.
- 범위: V-Order는 파일 수준입니다. 압축, 진공 및 시간 이동과 같은 델타 작업을 함께 사용할 수 있습니다.
V-Order 쓰기 작업 제어
V-Order는 특히 읽기가 많은 시나리오에서 더 빠른 쿼리 성능을 위해 Parquet 파일 레이아웃을 최적화하는 데 사용됩니다. Microsoft Fabric에서 새로 만든 모든 작업 영역에서는 쓰기가 많은 데이터 엔지니어링 워크로드의 성능을 최적화하기 위해 V-Order는 기본적으로 비활성화됩니다.
Apache Spark의 V-Order 동작은 다음 구성을 통해 제어됩니다.
| 구성 | 기본값 | 설명 |
|---|---|---|
spark.sql.parquet.vorder.default |
false |
세션 수준 V-Order 쓰기를 제어합니다. 기본적으로 false로 설정되며, 새 패브릭 작업 영역에서 그렇게 됩니다. |
TBLPROPERTIES("delta.parquet.vorder.enabled") |
해제 | 테이블 수준에서 기본 V 순서 동작을 제어합니다. |
DataFrame 작성기 옵션: parquet.vorder.enabled |
해제 | 쓰기 작업 수준에서 V 순서를 제어하는 데 사용됩니다. |
다음 명령을 사용하여 시나리오에 맞게 V-Order 쓰기를 활성화하거나 무시합니다.
새 Fabric 작업 영역(spark.sql.parquet.vorder.default=false)에서는 수집 및 변환 파이프라인의 쓰기 성능을 향상시키기 위해 기본적으로 V-Order가 비활성화되어 있습니다.
읽기 중심 워크로드, 즉 대화형 쿼리나 대시보드의 경우, spark.sql.parquet.vorder.default를 true로 설정하여 V-Order를 활성화합니다. 읽기 중심 성능을 위해 readHeavyforSpark V-Order를 자동으로 사용하도록 설정하는 리소스 프로필로 전환하거나 ReadHeavy 리소스 프로필을 전환할 수도 있습니다.
Fabric 런타임 1.3 이상에서는 설정이 spark.sql.parquet.vorder.enable 제거됩니다. 델타 최적화 중에 V 순서를 OPTIMIZE자동으로 적용할 수 있으므로 이 이전 설정이 필요하지 않습니다. 이전 런타임 버전에서 마이그레이션하는 경우 코드에서 이 설정을 제거합니다.
Apache Spark 세션에서 V-Order 구성 확인
이러한 명령을 사용하여 변경하기 전에 현재 세션 값을 확인합니다.
%%sql
SET spark.sql.parquet.vorder.default
Apache Spark 세션에서 V-Order 쓰기 사용 안 함
워크로드가 쓰기가 많고 더 빠른 수집 또는 변환 쓰기를 원하는 경우 이러한 명령을 사용합니다.
%%sql
SET spark.sql.parquet.vorder.default=FALSE
Apache Spark 세션에서 V-Order 쓰기 사용
세션 수준에서 V-Order를 사용하도록 설정하면, 해당 세션의 모든 Parquet 쓰기는 명시적으로 parquet.vorder.enabled가 false로 설정된 경우라도 V-Order를 사용합니다. 여기에는 델타 테이블과 비델타 Parquet 테이블 모두가 포함됩니다.
%%sql
SET spark.sql.parquet.vorder.default=TRUE
델타 테이블 속성을 사용하여 V-Order 제어
이 섹션에서는 테이블 속성이 SQL DDL 및 ALTER TABLE 문을 통해 정의되기 때문에 Spark SQL을 사용합니다.
세션에 적용되는 테이블 수준 기본값을 원하는 경우 테이블 속성을 사용합니다.
테이블을 만드는 동안 V-Order 테이블 속성을 사용하도록 설정합니다.
%%sql
CREATE TABLE person (id INT, name STRING, age INT) USING parquet TBLPROPERTIES("delta.parquet.vorder.enabled" = "true");
테이블 속성이 true, INSERT, UPDATE, MERGE로 설정된 경우 쓰기 시간에 V-Order를 적용합니다. 세션 수준 및 쓰기 수준 설정이 여전히 우선하므로 쓰기는 V-Order를 사용하도록 설정된 TBLPROPERTIES경우에도 false 계속 사용할 수 있습니다.
테이블 속성을 변경하여 V-Order를 사용하거나 사용하지 않도록 설정합니다.
%%sql
ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.enabled" = "true");
ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.enabled" = "false");
ALTER TABLE person UNSET TBLPROPERTIES("delta.parquet.vorder.enabled");
테이블 속성을 사용하여 V-Order를 사용하거나 사용하지 않도록 설정하면 테이블에 대한 이후 쓰기만 영향을 받습니다. Parquet 파일은 만들 때 사용된 순서를 유지합니다. V-Order를 적용하거나 제거하도록 현재 물리적 구조를 변경하려면 테이블 압축을 읽습니다.
쓰기 작업에서 직접 V-Order 제어
이 섹션에서는 PySpark를 사용하여 DataFrame 기록기 API를 보여 줍니다. 동일한 옵션을 사용하여 Scala DataFrame API에서 동일한 패턴을 사용할 수 있습니다.
세션 전체 또는 테이블 전체 기본값 대신 작업별 컨트롤이 필요한 경우 쓰기 수준 옵션을 사용합니다.
모든 Apache Spark 쓰기 명령은 명시적으로 재정의되지 않은 경우 세션 설정을 상속합니다. 다음 예제에서는 세션 구성을 상속하여 V-Order를 사용하여 씁니다.
df_source.write\
.format("delta")\
.mode("append")\
.saveAsTable("myschema.mytable")
DeltaTable.createOrReplace(spark)\
.addColumn("id","INT")\
.addColumn("firstName","STRING")\
.addColumn("middleName","STRING")\
.addColumn("lastName","STRING",comment="surname")\
.addColumn("birthDate","TIMESTAMP")\
.location("Files/people")\
.execute()
df_source.write\
.format("delta")\
.mode("overwrite")\
.option("replaceWhere","start_date >= '2025-01-01' AND end_date <= '2025-01-31'")\
.saveAsTable("myschema.mytable")
V-Order는 조건자의 영향을 받는 파일에만 적용됩니다.
spark.sql.parquet.vorder.default가 설정되지 않았거나 false로 설정된 세션에서, 다음 명령은 V-Order를 사용하여 기록합니다.
df_source.write\
.format("delta")\
.mode("overwrite")\
.option("replaceWhere","start_date >= '2025-01-01' AND end_date <= '2025-01-31'")\
.option("parquet.vorder.enabled","true")\
.saveAsTable("myschema.mytable")
DeltaTable.createOrReplace(spark)\
.addColumn("id","INT")\
.addColumn("firstName","STRING")\
.addColumn("middleName","STRING")\
.addColumn("lastName","STRING",comment="surname")\
.addColumn("birthDate","TIMESTAMP")\
.option("parquet.vorder.enabled","true")\
.location("Files/people")\
.execute()