이 페이지에서는 Databricks SDK를 사용하여 Databricks에서 데이터 프로필을 만드는 방법을 설명하고 API 호출에 사용되는 매개 변수를 설명합니다. REST API를 사용하여 데이터 프로필을 만들고 관리할 수도 있습니다.
참조 정보는 데이터 프로파일링 SDK 참조 및 REST API 참조를 참조하세요.
Unity 카탈로그에 등록된 관리형 또는 외부 델타 테이블에 프로필을 만들 수 있습니다. 단일 프로필만 모든 테이블에 대한 Unity 카탈로그 메타스토어에서 만들 수 있습니다.
메모
사용되지 않는 quality_monitors API에 대한 자세한 내용은 API를 사용하여 quality_monitors 데이터 프로필 만들기(사용되지 않음)를 참조하세요.
요구 사항
최신 버전의 API를 사용하려면 Notebook 시작 부분에 다음 명령을 사용하여 Python 클라이언트를 설치합니다.
%pip install "databricks-sdk>=0.68.0"
사용자 환경에서 Databricks SDK를 사용하도록 인증하려면 인증을 참조하세요.
프로필 형식
프로필을 만들 때 다음 프로필 유형 중 하나를 선택합니다. TimeSeriesInferenceLogSnapshot 이 섹션에서는 각 옵션에 대해 간략하게 설명합니다. 자세한 내용은 데이터 프로파일링 SDK 참조 또는 REST API 참조를 참조하세요.
메모
- 시계열 또는 유추 프로필을 처음 만들 때 Databricks는 생성 30일 전의 데이터만 분석합니다. 프로필을 만든 후에는 모든 새 데이터가 처리됩니다.
- 구체화된 뷰에 정의된 프로필은 증분 처리를 지원하지 않습니다.
팁 (조언)
TimeSeries 및 Inference 프로필의 경우, 테이블에서 변경 데이터 피드 (CDF)를 활성화하는 것이 가장 좋습니다. CDF를 사용하도록 설정하면 새로 고칠 때마다 전체 테이블을 다시 처리하는 대신 새로 추가된 데이터만 처리됩니다. 이렇게 하면 실행이 더 효율적이며 여러 테이블에서 크기를 조정할 때 비용이 절감됩니다.
TimeSeries 프로필
프로필은 TimeSeries을 통해 데이터 분포를 다양한 시간 창에 걸쳐 비교합니다. 프로필 TimeSeries을 위해 다음을 제공해야 합니다.
- 타임스탬프 열(
timestamp_column)입니다. 타임스탬프 열 데이터 형식은TIMESTAMP를 사용하여to_timestamp타임스탬프로 변환할 수 있는 형식이거나 형식이어야 합니다. - 메트릭을 계산하기 위해 사용하는
granularities의 집합입니다. 사용할 수 있는 세분성은 다음과 같습니다.- 집계_세분도_5분
- AGGREGATION_GRANULARITY_30_분
- 집계_세분성_1_시간
- 집계_세부항목_1일
- AGGREGATION_GRANULARITY_1_WEEK (집계 세분화 1주)
- AGGREGATION_GRANULARITY_2_WEEKS (집계_세분성_2주)
- 집계_세분성_3주
- AGGREGATION_GRANULARITY_4_WEEKS (집계 세분성: 4주)
- 집계_세분성_1_개월
- AGGREGATION_GRANULARITY_1_YEAR (집계 세분성_1년)
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.dataquality import Monitor, DataProfilingConfig, TimeSeriesConfig, AggregationGranularity, DataProfilingStatus, RefreshState, Refresh
w = WorkspaceClient()
schema = w.schemas.get(full_name=f"{catalog}.{schema}")
table = w.tables.get(full_name=f"{catalog}.{schema}.{table_name}")
config = DataProfilingConfig(
output_schema_id=schema.schema_id,
assets_dir=f"/Workspace/Users/{username}/databricks_quality_monitoring/{TABLE_NAME}",
time_series=TimeSeriesConfig(
timestamp_column="ts",
granularities=[AggregationGranularity.AGGREGATION_GRANULARITY_1_DAY]),
slicing_exprs=["type='Red'"]
)
info = w.data_quality.create_monitor(
monitor=Monitor(
object_type="table", # object_type is always "table" for data profiling
object_id=table.table_id,
data_profiling_config=config,
),
)
InferenceLog 프로필
InferenceLog 프로필은 프로필과 TimeSeries 유사하지만 모델 품질 메트릭도 포함합니다.
InferenceLog 프로필은 다음 매개 변수를 사용합니다.
| 매개 변수 | 설명 |
|---|---|
problem_type |
MonitorInferenceLogProblemType.PROBLEM_TYPE_CLASSIFICATION 또는 MonitorInferenceLogProblemType.PROBLEM_TYPE_REGRESSION |
prediction_column |
모델의 예측 값을 포함하는 열입니다. |
timestamp_column |
유추 요청의 타임스탬프를 포함하는 열입니다. |
model_id_column |
예측에 사용되는 모델의 ID를 포함하는 열입니다. |
granularities |
시간에 따라 창에서 데이터를 분할하는 방법을 결정합니다. 사용 가능한 값은 프로필을 참조 TimeSeries 하세요. |
label_column |
(선택 사항) 모델 예측에 대한 기본 진리를 포함하는 열입니다. |
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.dataquality import Monitor, DataProfilingConfig, InferenceLogConfig, InferenceProblemType, AggregationGranularity, DataProfilingStatus, RefreshState, Refresh
w = WorkspaceClient()
schema = w.schemas.get(full_name=f"{catalog}.{schema}")
table = w.tables.get(full_name=f"{catalog}.{schema}.{table_name}")
config = DataProfilingConfig(
output_schema_id=schema.schema_id,
assets_dir=f"/Workspace/Users/{username}/databricks_quality_monitoring/{TABLE_NAME}",
inference_log=InferenceLogConfig(
problem_type=InferenceProblemType.INFERENCE_PROBLEM_TYPE_CLASSIFICATION,
prediction_column="preds",
model_id_column="model_ver",
label_column="label", # optional
timestamp_column="ts",
granularities=[AggregationGranularity.AGGREGATION_GRANULARITY_1_DAY])
)
info = w.data_quality.create_monitor(
monitor=Monitor(
object_type="table",
object_id=table.table_id,
data_profiling_config=config,
),
)
프로필 InferenceLog의 경우, 슬라이스는 고유한 model_id_col 값에 따라 자동으로 생성됩니다.
Snapshot 프로필
반면 TimeSeries, Snapshot 테이블의 전체 내용이 시간이 지남에 따라 어떻게 변경되는지를 프로파일합니다. 메트릭은 테이블의 모든 데이터에 대해 계산되며 프로필을 새로 고칠 때마다 테이블 상태를 반영합니다.
메모
스냅샷 프로필의 최대 테이블 크기는 4TB입니다. 더 큰 테이블의 경우 시계열 프로필을 대신 사용합니다.
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.dataquality import Monitor, DataProfilingConfig, SnapshotConfig, DataProfilingStatus, RefreshState, Refresh
w = WorkspaceClient()
schema = w.schemas.get(full_name=f"{catalog}.{schema}")
table = w.tables.get(full_name=f"{catalog}.{schema}.{table_name}")
table_id = table.table_id
table_object_type = "table"
config = DataProfilingConfig(
output_schema_id=schema.schema_id,
assets_dir=f"/Workspace/Users/{username}/databricks_quality_monitoring/{TABLE_NAME}",
snapshot=SnapshotConfig(),
slicing_exprs=["type='Red'"]
)
새로 고침 및 결과 보기
새로 고침 기록을 보려면 데이터 프로파일링을 사용하도록 설정한 Databricks 작업 영역을 사용해야 합니다.
메트릭 테이블을 새로 고치려면 .를 사용합니다 create_refresh. 다음은 그 예입니다.
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
run_info = w.data_quality.create_refresh(
object_type=table_object_type, object_id=table_id, refresh=Refresh(
object_type=table_object_type,
object_id=table_id,
)
)
Notebook에서 호출 create_refresh 하면 메트릭 테이블이 생성되거나 업데이트됩니다. 이 계산은 Notebook이 연결된 클러스터가 아닌 서버리스 컴퓨팅에서 실행됩니다. 통계가 업데이트되는 동안 Notebook에서 명령을 계속 실행할 수 있습니다.
메트릭 테이블에 저장된 통계에 대한 정보는 모니터 메트릭 테이블을 참조하세요. 메트릭 테이블은 Unity 카탈로그 테이블입니다. Notebook과 SQL 쿼리 탐색기에서 쿼리할 수 있으며, 카탈로그 탐색기에서 볼 수 있습니다.
프로필과 연결된 모든 새로 고침의 기록을 표시하려면 list_refreshes을(를) 사용하십시오.
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
it = w.data_quality.list_refresh(object_type=table_object_type, object_id=table_id)
대기 중이거나 실행 중이거나 완료된 특정 실행의 상태를 확인하려면 get_refresh를 사용하십시오.
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
it = w.data_quality.list_refresh(object_type=table_object_type, object_id=table_id)
run_info = next(it, None)
while run_info.state in (RefreshState.MONITOR_REFRESH_STATE_PENDING, RefreshState.MONITOR_REFRESH_STATE_RUNNING):
run_info = w.data_quality.get_refresh(object_type=table_object_type, object_id=table_id, refresh_id=run_info.refresh_id)
time.sleep(30)
프로필 설정 보기
API get_monitor를 사용하여 프로필 설정을 검토할 수 있습니다.
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
table = w.tables.get(full_name=f"{catalog}.{schema}.{table_name}")
w.data_quality.get_monitor(object_type="table", object_id=table.table_id)
일정
프로필을 예약된 기준에 따라 실행하도록 설정하려면 schedule의 create_monitor 매개 변수를 사용합니다.
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import MonitorTimeSeries, MonitorCronSchedule
w = WorkspaceClient()
schema = w.schemas.get(full_name=f"{catalog}.{schema}")
table = w.tables.get(full_name=f"{catalog}.{schema}.{table_name}")
config = DataProfilingConfig(
output_schema_id=schema.schema_id,
snapshot=SnapshotConfig(),
schedule=CronSchedule(
quartz_cron_expression="0 0 12 * * ?", # schedules a refresh every day at 12 noon
timezone_id="PST",
)
)
info = w.data_quality.create_monitor(
monitor=Monitor(
object_type="table",
object_id=table.table_id,
data_profiling_config=config,
),
)
자세한 내용은 cron 식을 참조하세요.
알림
프로필에 대한 알림을 설정하려면 다음 매개 변수notifications를 create_monitor 사용합니다.
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.dataquality import Monitor, DataProfilingConfig, SnapshotConfig, NotificationSettings, NotificationDestination
w = WorkspaceClient()
schema = w.schemas.get(full_name=f"{catalog}.{schema}")
table = w.tables.get(full_name=f"{catalog}.{schema}.{table_name}")
config = DataProfilingConfig(
output_schema_id=schema.schema_id,
snapshot=SnapshotConfig(),
notification_settings=NotificationSettings(
# Notify the given email when a monitoring refresh fails or times out.
on_failure=NotificationDestination(
email_addresses=["your_email@domain.com"]
)
)
)
info = w.data_quality.create_monitor(
monitor=Monitor(
object_type="table",
object_id=table.table_id,
data_profiling_config=config,
),
)
이벤트 유형당 최대 5개의 이메일 주소가 지원됩니다(예: "on_failure").
메트릭 테이블에 대한 액세스 제어
프로필에서 만든 메트릭 테이블 및 대시보드는 프로필을 만든 사용자가 소유합니다. Unity 카탈로그 권한을 사용하여 메트릭 테이블에 대한 액세스를 제어할 수 있습니다. 작업 영역 내에서 대시보드를 공유하려면 대시보드 오른쪽 위에 있는 공유 단추를 사용합니다.
프로필 삭제
프로필을 삭제하려면 다음을 수행합니다.
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
table = w.tables.get(full_name=f"{catalog}.{schema}.{table_name}")
w.data_quality.delete_monitor(object_type="table", object_id=table.table_id)
이 명령은 프로필 테이블과 프로필에서 만든 대시보드를 삭제하지 않습니다. 별도의 단계에서 해당 자산을 삭제하거나 다른 위치에 저장할 수 있습니다.
예제 노트북들
다음 예제 Notebook에서는 프로필을 만들고, 프로필을 새로 고치고, 프로필을 만드는 메트릭 테이블을 검사하는 방법을 보여 줍니다.
노트북 예제: 시계열 분석 프로필
이 노트북은 TimeSeries 형식 프로필을 생성하는 방법을 보여줍니다.
TimeSeries 프로필 예제 노트북
Notebook 예제: 추론 프로필(회귀)
이 노트북에서는 회귀 문제에 대한 InferenceLog 타입 프로필을 만드는 방법을 보여 줍니다.
추론 프로필 회귀 예제 노트북
Notebook 예제: 유추 프로필(분류)
이 노트북에서는 분류 문제를 위한 InferenceLog 유형 프로파일을 만드는 방법을 보여 줍니다.
추론 프로필 분류 예제 노트북
Notebook 예제: 스냅샷 프로필
이 노트북은 Snapshot 형식 프로필을 생성하는 방법을 보여줍니다.