데이터브릭스 시스템 테이블은 계정의 운영 데이터를 분석할 수 있는 Databricks에서 호스팅하는 분석 저장소입니다. 이 테이블들은 system
카탈로그에 위치하며, 계정 전체에서 이루어지는 다양한 활동과 리소스 사용에 대한 이력 정보를 제공합니다. 시스템 테이블을 통해 사용자는 계정 활동, 리소스 사용량, 비용, 쿼리 성능 등을 모니터링하고 분석할 수 있습니다.
시스템 테이블의 주요 특징은 다음과 같습니다:
데이터브릭스는 다음과 같은 주요 시스템 테이블 스키마를 제공합니다:
스키마 | 설명 | 주요 테이블 |
---|---|---|
access | 접근 및 감사 관련 데이터 | audit , table_lineage , column_lineage , assistant_events , clean_room_events , outbound_network |
billing | 비용 및 청구 관련 데이터 | usage , list_prices |
compute | 컴퓨팅 리소스 관련 데이터 | clusters , node_timeline , node_types , warehouses , warehouse_events |
lakeflow | 작업 및 워크플로우 관련 데이터 | jobs , job_tasks , job_run_timeline , job_task_run_timeline |
marketplace | 마켓플레이스 관련 데이터 | listing_funnel_events , listing_access_events |
query | 쿼리 실행 관련 데이터 | history |
serving | 모델 서빙 관련 데이터 | endpoint_usage , served_entities |
storage | 스토리지 최적화 관련 데이터 | predictive_optimization_operations_history |
이중 일부 테이블은 기본적으로 활성화되어 있으며(billing
, compute
), 나머지는 계정 관리자가 수동으로 활성화해야 합니다.
감사 로그 시스템 테이블(system.access.audit
)은 계정 내에서 발생하는 모든 감사 이벤트를 기록합니다. 이를 통해 누가, 언제, 어떤 작업을 수행했는지 추적할 수 있습니다.
주요 컬럼:
account_id - 계정 ID
workspace_id - 워크스페이스 ID
event_time - 이벤트 발생 시간
source_ip_address - 요청 발생 IP 주소
user_identity - 요청 사용자 정보
service_name - 서비스 이름 (unityCatalog, notebook 등)
action_name - 수행된 작업 (getTable, createTable 등)
request_params - 요청 파라미터
response - 응답 정보
활용 사례:
쿼리 히스토리 테이블(system.query.history
)은 SQL 웨어하우스나 서버리스 컴퓨팅에서 실행된 모든 쿼리에 대한 기록을 제공합니다.
주요 컬럼:
statement_id - 쿼리 실행 고유 ID
executed_by - 실행한 사용자 이메일/이름
statement_text - SQL 문장 텍스트
statement_type - 문장 타입 (SELECT, INSERT 등)
total_duration_ms - 총 실행 시간(밀리초)
execution_duration_ms - 실행 단계 소요 시간
start_time - 쿼리 시작 시간
end_time - 쿼리 종료 시간
read_bytes - 읽은 데이터 크기
read_rows - 읽은 행 수
produced_rows - 생성된 행 수
활용 사례:
작업 관련 시스템 테이블(system.lakeflow.*
)은 데이터브릭스 작업의 생성, 실행, 성능에 대한 정보를 제공합니다.
주요 테이블:
jobs: 모든 작업의 메타데이터
job_id - 작업 ID
name - 작업 이름
creator_id - 생성자 ID
run_as - 실행 권한 사용자
job_tasks: 작업 내 태스크 정보
job_id - 작업 ID
task_key - 태스크 키
depends_on_keys - 의존성 있는 태스크 키
job_run_timeline: 작업 실행 타임라인
run_id - 실행 ID
period_start_time - 실행 시작 시간
period_end_time - 실행 종료 시간
trigger_type - 트리거 유형
result_state - 실행 결과 상태
활용 사례:
청구 사용량 테이블(system.billing.usage
)은 계정의 모든 청구 가능한 사용량에 대한 정보를 제공합니다.
주요 컬럼:
sku_name - SKU 이름
usage_start_time - 사용 시작 시간
usage_end_time - 사용 종료 시간
usage_quantity - 사용량
usage_unit - 사용 단위 (DBU 등)
usage_metadata - 사용 메타데이터 (cluster_id, job_id 등)
identity_metadata - 실행 주체 정보
record_type - 레코드 타입 (원본, 수정 등)
billing_origin_product - 사용 제품(JOBS, DLT, SQL 등)
활용 사례:
시스템 테이블을 사용하려면 Unity Catalog가 활성화된 워크스페이스가 필요합니다. 다음 절차에 따라 시스템 테이블을 활성화하고 접근할 수 있습니다:
시스템 테이블은 스키마 레벨에서 활성화됩니다. billing
및 compute
스키마는 기본적으로 활성화되어 있으며, 다른 스키마는 계정 관리자가 수동으로 활성화해야 합니다.
Databricks CLI를 사용한 활성화 방법:
Copy# 사용 가능한 시스템 스키마 목록 확인
databricks system-schemas list METASTORE_ID
# 시스템 스키마 활성화
databricks system-schemas enable METASTORE_ID SCHEMA_NAME
시스템 테이블에 대한 접근 권한은 Unity Catalog를 통해 관리됩니다. 메타스토어 관리자이자 계정 관리자인 사용자가 적절한 권한을 부여해야 합니다.
Copy-- 특정 사용자에게 감사 로그 접근 권한 부여
GRANT USE ON SCHEMA system.access TO `user@example.com`;
GRANT SELECT ON TABLE system.access.audit TO `user@example.com`;
-- 특정 그룹에게 청구 데이터 접근 권한 부여
GRANT USE ON SCHEMA system.billing TO `finance-group`;
GRANT SELECT ON TABLE system.billing.usage TO `finance-group`;
Unity Catalog 활성화된 워크스페이스의 카탈로그 탐색기에서 system
카탈로그를 통해 시스템 테이블에 접근할 수 있습니다.
Copy-- 지난 7일간 특정 테이블에 접근한 사용자 목록
SELECT
user_identity.email as `User`,
IFNULL(
request_params.full_name_arg,
request_params.name
) AS `Table`,
action_name AS `Type of Access`,
event_time AS `Time of Access`
FROM
system.access.audit
WHERE
(
request_params.full_name_arg = 'catalog_name.schema_name.table_name'
OR (
request_params.name = 'table_name'
AND request_params.schema_name = 'schema_name'
)
)
AND action_name IN ('createTable', 'getTable', 'deleteTable')
AND event_date > now() - interval 7 day
ORDER BY
event_date DESC
Copy-- 작업별 평균 실행 시간(초) 및 95 퍼센타일 조회
WITH job_run_duration AS (
SELECT
workspace_id,
job_id,
run_id,
CAST(SUM(period_end_time - period_start_time) AS LONG) as duration
FROM
system.lakeflow.job_run_timeline
WHERE
period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
GROUP BY ALL
)
SELECT
t1.workspace_id,
t1.job_id,
COUNT(DISTINCT t1.run_id) as runs,
MEAN(t1.duration) as mean_seconds,
AVG(t1.duration) as avg_seconds,
PERCENTILE(t1.duration, 0.9) as p90_seconds,
PERCENTILE(t1.duration, 0.95) as p95_seconds
FROM
job_run_duration t1
GROUP BY ALL
ORDER BY mean_seconds DESC
LIMIT 100
Copy-- 작업별 월간 비용 분석
WITH jobs_usage AS (
SELECT
*,
usage_metadata.job_id,
usage_metadata.job_run_id as run_id,
identity_metadata.run_as as run_as
FROM system.billing.usage
WHERE
billing_origin_product="JOBS"
AND MONTH(usage_date) = MONTH(CURRENT_DATE)
AND YEAR(usage_date) = YEAR(CURRENT_DATE)
),
jobs_usage_with_usd AS (
SELECT
jobs_usage.*,
usage_quantity * pricing.default as usage_usd
FROM jobs_usage
LEFT JOIN system.billing.list_prices pricing ON
jobs_usage.sku_name = pricing.sku_name
AND pricing.price_start_time <= jobs_usage.usage_start_time
AND (pricing.price_end_time >= jobs_usage.usage_start_time OR pricing.price_end_time IS NULL)
AND pricing.currency_code="USD"
)
SELECT
workspace_id,
job_id,
FIRST(run_as, TRUE) as run_as,
sku_name,
SUM(usage_usd) as usage_usd,
SUM(usage_quantity) as usage_quantity
FROM jobs_usage_with_usd
GROUP BY ALL
ORDER BY usage_usd DESC
LIMIT 20
Copy-- 사용자별 평균 쿼리 실행 시간 및 처리된 데이터 양
SELECT
executed_by,
COUNT(*) AS query_count,
AVG(total_duration_ms) / 1000 AS avg_duration_seconds,
SUM(read_bytes) / POWER(1024, 3) AS total_data_read_gb,
SUM(read_rows) AS total_rows_read
FROM
system.query.history
WHERE
start_time >= DATE_ADD(CURRENT_DATE(), -30)
AND execution_status = 'FINISHED'
GROUP BY
executed_by
ORDER BY
avg_duration_seconds DESC
LIMIT 20
데이터브릭스 시스템 테이블을 효과적으로 활용하기 위한 전략은 다음과 같습니다:
system.access.audit
테이블을 분석하여 비정상적인 접근 패턴이나 권한 변경을 모니터링합니다.system.access.table_lineage
와 system.access.column_lineage
를 활용하여 데이터 흐름을 추적하고 규정 준수 요구사항을 충족합니다.system.billing.usage
테이블을 사용하여 비용 동향을 분석하고 예산을 초과하는 워크로드를 식별합니다.system.compute.clusters
및 system.compute.node_timeline
테이블을 통해 컴퓨팅 리소스 활용도를 평가하고 최적화 기회를 찾습니다.system.query.history
테이블을 사용하여 느린 쿼리를 식별하고 최적화 기회를 찾습니다.system.lakeflow.job_run_timeline
및 system.lakeflow.job_task_run_timeline
테이블을 통해 작업 실행 성능을 모니터링하고 병목 현상을 식별합니다.데이터브릭스 시스템 테이블은 계정 활동을 모니터링하고 분석하기 위한 강력한 도구입니다. 이 테이블들은 보안, 비용 관리, 성능 최적화 및 운영 인텔리전스를 위한 귀중한 통찰력을 제공합니다.
주요 시스템 테이블을 활용하여 다음과 같은 이점을 얻을 수 있습니다:
데이터브릭스 시스템 테이블의 효과적인 활용은 레이크하우스 플랫폼의 보안, 효율성 및 비용 효과성을 향상시키는 데 중요한 역할을 합니다. 시스템 테이블 데이터를 정기적으로 분석하고 모니터링하여 데이터 플랫폼에 대한 통찰력을 지속적으로 개선하세요.
참고 자료: