적용 대상:✅ Microsoft Fabric의 SQL 분석 엔드포인트
이 자습서에서는 Microsoft Fabric Pipeline을 빌드하여 지능형 테이블 유지 관리를 수행하는 방법을 알아봅니다.
이 솔루션은 sys.sp_get_table_health_metrics Lakehouse SQL 분석 엔드포인트에서 T-SQL 저장 프로시저를 호출하고, 결과를 평가하고, 테이블에 실제로 유지 관리가 필요한 경우에만 실행됩니다 OPTIMIZE . 이 "check-then-act" 패턴은 성능이 저하된 테이블이 자동으로 유지 관리되도록 하면서 정상 테이블에 불필요한 컴퓨팅 지출을 방지합니다.
유지 관리가 필요한 이유
Lakehouse 테이블은 시간이 지남에 따라 너무 많은 작은 Parquet 파일을 누적할 수 있으므로 SQL 분석 엔드포인트에서 쿼리 성능이 저하됩니다.
테이블 상태에 관계없이 고정된 일정으로 실행하는 OPTIMIZE 대신, 이 파이프라인은 테이블의 상태를 먼저 확인하고 변칙이 검색될 때만 최적화를 트리거하는 정보에 입각한 결정을 내립니다.
사전 요구 사항
시작하기 전에 다음을 확인합니다.
- 기여자 이상의 권한이 있는 Microsoft Fabric 작업 영역.
- 모니터링하려는 델타 테이블이 하나 이상 포함된 해당 작업 영역의 Lakehouse입니다. 이 자습서에서는
SalesDataLakehouse라는 Lakehouse를 사용합니다. - Fabric 데이터 파이프라인에 대한 숙지
- Fabric 노트북에 익숙함.
솔루션 구조
완료된 파이프라인에는 다음과 같은 구조가 있습니다.
-
스크립트 작업: 대상 테이블에 대해 실행하고
sp_get_table_health_metrics테이블 상태 메트릭을 구조적 출력으로 반환합니다. -
조건 작업인 경우: 스크립트 출력에서 직접 읽고
PotentialAnomalyType0보다 큰지 확인합니다. 자세한 내용은PotentialAnomalyType잠재적인 변칙 형식 코드를 참조하세요. -
Notebook 작업(True 분기 내부): Spark notebook에서 테이블에 대해
OPTIMIZE를 실행합니다.
이 자습서를 마치면 파이프라인에서 매개 변수를 받아 트리거되면 테이블을 최적화하는 노트북이 준비됩니다.
1단계: 최적화 Notebook 만들기
노트북은 파이프라인으로부터 대상 Lakehouse, 스키마 및 테이블 이름을 매개변수로 전달받은 후 Spark SQL을 사용해 OPTIMIZE를 실행합니다.
- Fabric 작업 영역에서 + 새 항목>Notebook을 선택합니다.
- Notebook Optimize-Table의 이름을 지정합니다.
-
위치 아래에서 확인하는 테이블이 저장되는 Lakehouse를 선택합니다. 이 연습에서는
SalesDataLakehouse라는 이름의 레이크하우스를 사용합니다. - Create를 선택합니다.
매개 변수 셀 추가
첫 번째 셀은 런타임에 파이프라인이 재정의하는 변수를 정의합니다.
첫 번째 셀에서 다음 매개 변수를 입력합니다. 값은 중요하지 않으며, 파이프라인이 런타임에 해당 값을 재정의합니다.
# Parameters lakehouse_name = "<LakehouseName>" schema_name = "<SchemaName>" table_name = "<TableName>"Important
Fabric Notebook에서 매개 변수화가 작동하는 방식: 런타임에 Fabric 파이프라인에서 전달된 값으로 이러한 변수를 다시 할당하는 매개 변수 셀 바로 후에 새 셀을 삽입합니다. 여기서 설정한 값은 변수만 초기화하고 가독성을 향상시킵니다.
셀 메뉴 선택(...) >매개 변수 셀을 전환 하여 이 셀을 매개 변수 셀로 표시합니다.
OPTIMIZE 셀 추가
이 OPTIMIZE 명령은 T-SQL 명령이 아닌 Spark SQL 명령입니다. Notebook, Spark 작업 정의 또는 Lakehouse 유지 관리 인터페이스와 같은 Spark 환경에서 실행해야 합니다. SQL 분석 엔드포인트 및 웨어하우스 SQL 쿼리 편집기에서는 이 명령을 직접 지원하지 않습니다.
두 번째 셀에 다음을 입력합니다.
full_name = f"{lakehouse_name}.{schema_name}.{table_name}" print(f"Optimizing {full_name} ...") result = spark.sql(f"OPTIMIZE {full_name}") result.show(truncate=False)필요에 따라 Markdown 셀을 추가하여 다른 사용자의 전자 필기장을 제대로 문서화합니다. 완성된 노트북은 다음과 비슷한 모습이어야 합니다:
메모
이 예제에서는 스키마가 설정된 Lakehouse를 고려합니다. Lakehouse 스키마를 사용하지 않는 경우 full_name의 세 부분으로 구성된 이름을 그에 맞게 조정하세요.
2단계: 파이프라인 만들기
Fabric 작업 영역에서 + 새 항목>파이프라인을 선택합니다.
파이프라인의 이름을 Check-and-Optimize-Table로 지정합니다.
파이프라인 캔버스 배경을 선택한 다음 매개 변수 탭을 엽니다. 세 개의 매개 변수를 추가합니다.
Name Type 기본값 lakehouse_nameString SalesDataLakehouseschema_nameString dbotable_nameString FactSales
3단계: 스크립트 작업 추가
스크립트 작업은 SQL 분석 엔드포인트에서 실행 sys.sp_get_table_health_metrics 되고 결과를 캡처합니다.
Important
저장 프로시저 작업이 아닌 스크립트 작업을 사용합니다. 스크립트 작업만 결과 집합을 다운스트림 작업이 구문 분석할 수 있는 구조적 JSON 출력으로 노출합니다.
- 작업 탭에서 스크립트를 선택하여 캔버스에 추가합니다.
- 이름을 Check Table Health로 지정합니다.
- 설정 탭에서 다음을 수행합니다 .
연결: Lakehouse에 대한 SQL 분석 엔드포인트를 선택합니다. 목록에 없는 경우 드롭다운 목록의 맨 아래에서 모두 찾아보기를 선택한 다음, Lakehouse의 SQL 분석 엔드포인트를 찾습니다.
스크립트 유형: 쿼리를 선택합니다.
스크립트: 동적 콘텐츠 추가 를 선택하고 다음 식을 입력합니다.
@concat('EXEC sys.sp_get_table_health_metrics ''', pipeline().parameters.schema_name, '.', pipeline().parameters.table_name, '''')
이 식은 대상 테이블에 대해 저장 프로시저를 실행하는 SQL 명령을 생성합니다. 예를 들면 다음과 EXEC sys.sp_get_table_health_metrics 'dbo.FactSales'같습니다.
스크립트 출력 확인
파이프라인을 한 번 실행하고 스크립트 작업 출력을 검사합니다. 다음과 유사한 JSON 개체가 표시됩니다.
{
"resultSetCount": 1,
"resultSets": [
{
"rowCount": 1,
"rows": [
{
"PotentialAnomalyType": 3,
"PotentialAnomalyDescription": "Too many small files...",
"FileCount": 2688,
"...": "..."
}
]
}
]
}
Important
실제 결과는 테이블의 상태에 따라 달라질 수 있습니다. 핵심은 sys.sp_get_table_health_metrics에 의해 노출된 열을 반환한다는 것입니다.
4단계: If 조건 작업 추가
If 조건 활동은 PotentialAnomalyType 작업 출력에서 직접 읽고 결과에 따라 결정을 내립니다. 다음 단계를 사용합니다.
[활동] 탭에서 [조건]을 선택하여 캔버스에 활동을 추가합니다.
이름을 Check Anomaly로 지정하세요.
성공(녹색) 화살표를 테이블 상태 확인에서 이상 여부 확인으로 그립니다.
활동 탭의 If Condition 활동에서 표현식을(를) 다음으로 설정합니다:
@greater(int(activity('Check Table Health').output.resultSets[0].rows[0]['PotentialAnomalyType']), 0)
이 식은 반환된 sys.sp_get_table_health_metrics첫 번째 행을 읽고, 정수로 캐스팅 PotentialAnomalyType 하고, 값이 0보다 큰 경우를 계산 true 합니다. 이는 대상 테이블에서 검색된 변칙을 나타냅니다.
5단계: Notebook 활동 추가 (True 브랜치)
If 조건 활동을 선택한 상태에서 True 옆에 있는 편집(연필 아이콘)을 선택합니다. 캔버스가 True 분기에 해당하는 하위 캔버스로 전환됩니다.
Notebook 활동을 True 하위 캔버스에 끌어다 놓습니다.
이름을 OPTIMIZE 실행으로 지정합니다.
설정 탭에서 다음을 수행합니다.
Notebook: 1단계에서 만든 Optimize-Table Notebook을 선택합니다.
기본 매개 변수를 확장한 다음 세 개의 행을 추가합니다.
Name Type 값 lakehouse_nameString @pipeline().parameters.lakehouse_nameschema_nameString @pipeline().parameters.schema_nametable_nameString @pipeline().parameters.table_name
세 개의 이름 열 값은 Notebook의 매개 변수 셀에 있는 변수 이름과 정확히 일치해야 합니다.
메모
거짓 활동은 비워 둘 수 있습니다. If 조건 활동은 비어 있는 False 분기를 작업 없음으로 처리하고 파이프라인이 성공한 것으로 간주합니다.
완료된 파이프라인은 다음과 같습니다.
6단계: 유효성 검사 및 실행
파이프라인 도구 모음에서 유효성 검사를 선택하여 구성 오류를 확인합니다.
실행을 선택하여 파이프라인을 수동으로 실행합니다.
실행 과정을 모니터링하고 다음을 확인하세요.
-
테이블 상태 확인: 실행 시 이 작업의 출력을 검사합니다. 저장 프로시저의 출력이
sys.sp_get_table_health_metricsJSON 형식으로 표시됩니다. -
이상 징후 확인: 스크립트 출력에서
PotentialAnomalyType을 직접 읽어 올바르게 평가합니다. -
OPTIMIZE 실행(
PotentialAnomalyType > 0인 경우에만): 이상 징후 확인 작업의 평가 결과가 True이면 OPTIMIZE 실행 작업의 입력을 검토하여 올바른 매개 변수(Lakehouse 이름, 스키마, 테이블 이름)를 사용하는지 확인하고, 출력을 확인하여OPTIMIZE작업의 메시지를 검토합니다.
-
테이블 상태 확인: 실행 시 이 작업의 출력을 검사합니다. 저장 프로시저의 출력이
자원을 정리하세요
이 자습서에 대해서만 리소스를 만들고 더 이상 필요하지 않은 경우 작업 영역에서 다음 항목을 삭제합니다.
- Check-and-Optimize-Table 파이프라인입니다.
- Optimize-Table 노트북.