이 문서에서는 컴퓨팅 시스템 테이블에 대한 참조 가이드를 제공합니다. 이러한 테이블을 사용하여 계정에서 클래식 다목적 컴퓨팅, 작업 컴퓨팅 및 Lakeflow Spark 선언적 파이프라인 컴퓨팅의 활동 및 메트릭을 모니터링할 수 있습니다. 이러한 클래식 컴퓨팅 테이블에는 다음이 포함됩니다.
-
clusters: 계정에 컴퓨팅 구성을 기록합니다. -
node_types: 하드웨어 정보를 포함하여 현재 사용 가능한 각 노드 유형에 대한 단일 레코드를 포함합니다. -
node_timeline: 컴퓨트 사용률 메트릭에 대한 분 단위 기록을 포함합니다. -
instance_events: 클래식 컴퓨팅 인스턴스의 상태 전환을 캡처합니다. -
instance_pools: 계정에 인스턴스 풀 구성을 기록합니다.
클러스터 테이블 스키마
클러스터 테이블은 다목적 컴퓨팅, 작업 컴퓨팅, Lakeflow Spark 선언적 파이프라인 컴퓨팅 및 파이프라인 유지 관리 컴퓨팅에 대한 시간 경과에 따른 컴퓨팅 구성의 전체 기록을 포함하는 느린 변경 차원 테이블입니다.
테이블 경로: 이 시스템 테이블은 system.compute.clusters
| 열 이름 | 데이터 형식 | 설명 | 예시 |
|---|---|---|---|
account_id |
문자열 | 이 클러스터가 만들어진 계정의 ID입니다. | 23e22ba4-87b9-4cc2-9770-d10b894b7118 |
workspace_id |
문자열 | 이 클러스터가 만들어진 작업 영역의 ID입니다. | 1234567890123456 |
cluster_id |
문자열 | 이 레코드가 연결된 클러스터의 ID입니다. | 0000-123456-crmpt124 |
cluster_name |
문자열 | 클러스터의 사용자 정의 이름입니다. | My cluster |
owned_by |
문자열 | 클러스터 소유자의 사용자 이름입니다. 기본값은 클러스터 작성자이지만 클러스터 API를 통해 변경할 수 있습니다. | sample_user@email.com |
create_time |
타임스탬프 | 이 컴퓨팅 정의 변경의 타임스탬프입니다. | 2023-01-09 11:00:00.000 |
delete_time |
타임스탬프 | 클러스터가 삭제된 시기의 타임스탬프입니다. 값은 null 클러스터가 삭제되지 않은 경우입니다. |
2023-01-09 11:00:00.000 |
driver_node_type |
문자열 | 드라이버 노드 형식 이름입니다. 클라우드 공급자의 인스턴스 형식 이름과 일치합니다. | Standard_D16s_v3 |
worker_node_type |
문자열 | 작업자 노드 형식 이름입니다. 클라우드 공급자의 인스턴스 형식 이름과 일치합니다. | Standard_D16s_v3 |
worker_count |
빅인트(bigint) | 작업자 수입니다. 고정 크기 클러스터에 대해서만 정의됩니다. | 4 |
min_autoscale_workers |
빅인트(bigint) | 설정된 최소 작업자 수입니다. 이 필드는 클러스터 자동 크기 조정에만 유효합니다. | 1 |
max_autoscale_workers |
빅인트(bigint) | 설정된 최대 작업자 수입니다. 이 필드는 클러스터 자동 크기 조정에만 유효합니다. | 1 |
auto_termination_minutes |
빅인트(bigint) | 구성된 자동 종료 기간입니다. | 120 |
enable_elastic_disk |
불리언 | 디스크 자동 크기 조정 사용 상태. | true |
tags |
지도 | 클러스터에 대한 사용자 정의 태그(기본 태그는 포함되지 않음). | {"ResourceClass":"SingleNode"} |
cluster_source |
문자열 | 클러스터의 출처.
UI 또는 API 값은 범용 컴퓨팅에만 적용됩니다. 모든 작업 컴퓨팅은 JOB로 기록됩니다. 파이프라인은 PIPELINE 또는 PIPELINE_MAINTENANCE입니다. |
UI |
init_scripts |
배열 | init 스크립트에 대한 경로 집합입니다. | "/Users/example@email.com/files/scripts/install-python-pacakges.sh" |
aws_attributes |
구조체 (struct) | AWS 관련 설정입니다. | null |
azure_attributes |
구조체 (struct) | Azure의 특정 설정. | {"first_on_demand": "0","availability": "ON_DEMAND_AZURE","spot_bid_max_price": "—1"} |
gcp_attributes |
구조체 (struct) | GCP 특정 설정입니다. 이 필드는 비어 있습니다. | null |
driver_instance_pool_id |
문자열 | 드라이버가 인스턴스 풀 위에 구성된 경우 인스턴스 풀 ID입니다. | 1107-555555-crhod16-pool-DIdnjazB |
worker_instance_pool_id |
문자열 | 작업자가 인스턴스 풀 위에 구성된 경우 인스턴스 풀 ID입니다. | 1107-555555-crhod16-pool-DIdnjazB |
dbr_version |
문자열 | Databricks 클러스터의 런타임입니다. | 14.x-snapshot-scala2.12 |
change_time |
타임스탬프 | 컴퓨팅 정의에 대한 변경 타임스탬프입니다. | 2023-01-09 11:00:00.000 |
change_date |
날짜 | 날짜를 변경합니다. 보존에 사용됩니다. | 2023-01-09 |
data_security_mode |
문자열 | 컴퓨팅 리소스의 액세스 모드입니다. 액세스 모드 참조를 참조하세요. | USER_ISOLATION |
policy_id |
문자열 | 해당하는 경우 클러스터의 컴퓨팅 정책 ID입니다. | 1234F35636110A5B |
액세스 모드 참조
다음 표에서는 열에 포함된 가능한 값을 변환합니다 data_security_mode . 열은 특정 파이프라인 및 시스템이 생성한 클러스터에 대해 null일 수도 있습니다.
| 가치 | 액세스 모드 |
|---|---|
USER_ISOLATION |
스탠다드 |
SINGLE_USER |
전용 |
레거시 액세스 모드는 다음 값으로 기록됩니다.
| 가치 | 액세스 모드 |
|---|---|
LEGACY_PASSTHROUGH |
자격 증명 통과(공유) |
LEGACY_SINGLE_USER |
자격 증명 통과(단일 사용자) |
LEGACY_TABLE_ACL |
관습 |
NONE |
공유된 격리 없음 |
노드 유형 테이블 스키마
노드 유형 테이블은 기본 하드웨어 정보를 사용하여 현재 사용 가능한 노드 형식을 캡처합니다.
테이블 경로: 이 시스템 테이블은 system.compute.node_types있습니다.
| 열 이름 | 데이터 형식 | 설명 | 예시 |
|---|---|---|---|
account_id |
문자열 | 이 클러스터가 만들어진 계정의 ID입니다. | 23e22ba4-87b9-4cc2-9770-d10b894b7118 |
node_type |
문자열 | 노드 형식에 대한 고유 식별자입니다. | Standard_D16s_v3 |
core_count |
더블 | 인스턴스의 vCPU 수입니다. | 48.0 |
memory_mb |
길다 | 인스턴스의 총 메모리입니다. | 393216 |
gpu_count |
길다 | 인스턴스의 GPU 수입니다. | 0 |
노드 타임라인 테이블 스키마
노드 타임라인 테이블은 분 단위로 노드 수준 리소스 사용률 데이터를 캡처합니다. 각 레코드에는 인스턴스당 지정된 시간 동안의 데이터가 포함됩니다. 이 표에서는 계정의 다목적 컴퓨팅, 작업 컴퓨팅, Lakeflow Spark 선언적 파이프라인 컴퓨팅 및 파이프라인 유지 관리 컴퓨팅 리소스에 대한 노드 타임라인을 캡처합니다.
테이블 경로: 이 시스템 테이블은 system.compute.node_timeline있습니다.
| 열 이름 | 데이터 형식 | 설명 | 예시 |
|---|---|---|---|
account_id |
문자열 | 이 컴퓨팅 리소스가 실행 중인 계정의 ID입니다. | 23e22ba4-87b9-4cc2-9770-d10b894b7118 |
workspace_id |
문자열 | 이 컴퓨팅 리소스가 실행 중인 작업 영역의 ID입니다. | 1234567890123456 |
cluster_id |
문자열 | 컴퓨팅 리소스의 ID입니다. | 0000-123456-crmpt124 |
instance_id |
문자열 | 특정 인스턴스의 ID입니다. | i-1234a6c12a2681234 |
start_time |
타임스탬프 | 레코드의 시작 시간(UTC)입니다. | 2024-07-16T12:00:00Z |
end_time |
타임스탬프 | 레코드의 종료 시간(UTC)입니다. | 2024-07-16T13:00:00Z |
driver |
불리언 | 인스턴스가 드라이버 또는 작업자 노드인지 여부입니다. | true |
cpu_user_percent |
더블 | 사용자 랜드에서 CPU가 소요된 시간의 백분율입니다. | 34.76163817234407 |
cpu_system_percent |
더블 | CPU가 커널에 소요된 시간의 백분율입니다. | 1.0895310279488264 |
cpu_wait_percent |
더블 | CPU가 I/O를 기다리는 데 소요된 시간의 백분율입니다. | 0.03445157400629276 |
mem_used_percent |
더블 | 해당 기간 동안 사용된 컴퓨팅 메모리의 백분율입니다(컴퓨팅에서 실행되는 백그라운드 프로세스에서 사용하는 메모리 포함). | 45.34858216779041 |
mem_swap_percent |
더블 | 메모리 교환에 기인하는 메모리 사용량의 백분율입니다. | 0.014648443087939 |
network_sent_bytes |
빅인트(bigint) | 네트워크 트래픽에서 전송된 바이트 수입니다. | 517376 |
network_received_bytes |
빅인트(bigint) | 네트워크 트래픽에서 수신된 바이트 수입니다. | 179234 |
disk_free_bytes_per_mount_point |
지도 | 탑재 지점별로 그룹화된 디스크 사용률입니다. 이는 컴퓨팅이 실행되는 동안에만 프로비전되는 임시 스토리지입니다. | {"/var/lib/lxc":123455551234,"/":123456789123,"/local_disk0":123412341234} |
node_type |
문자열 | 노드 형식의 이름입니다. 클라우드 공급자의 인스턴스 형식 이름과 일치합니다. | Standard_D16s_v3 |
private_ip |
문자열 | 노드에 할당된 개인 IP 주소입니다. | 10.0.0.42 |
인스턴스 이벤트 테이블 스키마
Important
이 시스템 테이블은 공개 프리뷰 상태에있습니다.
인스턴스 이벤트 테이블은 클래식 컴퓨팅 인스턴스의 상태 전환을 캡처합니다. 각 행은 단일 인스턴스에 대한 상태 변경을 나타냅니다. 이 표에는 동일한 클라우드 지역 내에 배포된 계정의 모든 작업 영역에서 다목적 컴퓨팅, 작업 컴퓨팅 및 Lakeflow Spark 선언적 파이프라인 컴퓨팅에 대한 레코드가 포함되어 있습니다.
테이블 경로: 이 시스템 테이블은 system.compute.instance_events있습니다.
| 열 이름 | 데이터 형식 | 설명 | 예시 |
|---|---|---|---|
account_id |
문자열 | 이 인스턴스가 시작된 계정의 ID입니다. | 23e22ba4-87b9-4cc2-9770-d10b894b7118 |
workspace_id |
문자열 | 이 인스턴스가 시작되는 작업 영역의 ID입니다. | 1234567890123456 |
instance_id |
문자열 | 인스턴스의 ID입니다. | i-0a1b2c3d4e5f67890 |
event_time |
타임스탬프 | 이벤트의 타임스탬프입니다. | 2024-01-15 10:30:00.000 |
event_type |
문자열 | 이벤트 유형입니다. 가능한 값은 INSTANCE_LAUNCHING 및 STATE_TRANSITION입니다. |
STATE_TRANSITION |
instance_pool_id |
문자열 | 인스턴스가 풀에 속하는 경우 인스턴스 풀 ID입니다. | 1107-555555-pool-abcd1234 |
cluster_id |
문자열 | 이 인스턴스가 배치된 클러스터의 ID입니다.
state가 INSTANCE_PLACED인 경우에만 채워집니다.
cluster_id 세부 정보를 참조하세요. |
0000-123456-xxxxxxxx |
node_type |
문자열 | 노드 형식의 이름입니다. 클라우드 공급자의 인스턴스 형식 이름과 일치합니다. | Standard_D16s_v3 |
state |
문자열 | 인스턴스 상태입니다. 인스턴스 상태를 참조하세요. | INSTANCE_PLACED |
availability_type |
문자열 | 인스턴스의 가용성 유형입니다. 가능한 값은 ON_DEMAND 및 SPOT(AWS, Azure) 또는 ON_DEMAND 및 GCP(PREEMPTIBLE)입니다. |
ON_DEMAND |
인스턴스 상태
-
INSTANCE_LAUNCHING: 인스턴스가 초기화되고 있습니다. -
INSTANCE_READY: 인스턴스가 완전히 초기화되어 사용할 준비가 되었지만 현재는 사용되지 않습니다. -
INSTANCE_PLACED: 인스턴스가 현재 사용 중입니다(클러스터에 조인됨). -
INSTANCE_TERMINATED: 인스턴스가 종료됩니다.
cluster_id 채워지는 시기는 언제인가요?
인스턴스 cluster_id 가 상태에 있을 때만 필드가 INSTANCE_PLACED 채워집니다. 다른 모든 상태(INSTANCE_LAUNCHING, INSTANCE_READY, INSTANCE_TERMINATED) cluster_id 의 경우는 .입니다 null. 이 동작은 풀된 인스턴스와 풀되지 않은 인스턴스 모두에 대해 일치합니다.
테이블에는 instance_events 다목적, 작업 및 Lakeflow Spark 선언적 파이프라인 컴퓨팅에 대한 배치 이벤트만 포함됩니다. SQL 웨어하우스와 같은 다른 워크로드에 대한 배치 이벤트는 이 표에 포함되지 않습니다.
인스턴스 풀 테이블 스키마
Important
이 시스템 테이블은 공개 프리뷰 상태에있습니다.
인스턴스 풀 테이블은 시간이 지남에 따라 인스턴스 풀 구성의 전체 기록을 포함하는 느린 변경 차원 테이블입니다. 구성이 변경되면 새 행이 내보내집니다. 논리적으로 이전 행을 대체합니다.
테이블 경로: 이 시스템 테이블은 system.compute.instance_pools있습니다.
| 열 이름 | 데이터 형식 | 설명 | 예시 |
|---|---|---|---|
account_id |
문자열 | 이 인스턴스 풀이 만들어진 계정의 ID입니다. | 23e22ba4-87b9-4cc2-9770-d10b894b7118 |
workspace_id |
문자열 | 이 인스턴스 풀이 만들어진 작업 영역의 ID입니다. | 1234567890123456 |
instance_pool_id |
문자열 | 인스턴스 풀의 ID입니다. | 1107-555555-pool-abcd1234 |
change_time |
타임스탬프 | 인스턴스 풀 구성에 대한 변경 타임스탬프입니다. | 2024-01-15 10:30:00.000 |
create_time |
타임스탬프 | 인스턴스 풀 만들기의 타임스탬프입니다. | 2024-01-10 08:00:00.000 |
delete_time |
타임스탬프 | 인스턴스 풀 삭제의 타임스탬프입니다. 값은 null 인스턴스 풀이 삭제되지 않은 경우입니다. |
null |
instance_pool_name |
문자열 | 인스턴스 풀의 사용자 정의 이름입니다. | My instance pool |
tags |
지도 | 인스턴스 풀에 대한 사용자 정의 태그(기본 태그는 포함하지 않음). | {"team":"data-engineering"} |
node_type |
문자열 | 풀의 인스턴스에 사용되는 노드 유형입니다. 클라우드 공급자의 인스턴스 형식 이름과 일치합니다. | Standard_D16s_v3 |
idle_instance_autotermination_minutes |
빅인트(bigint) | 풀 캐시의 유휴 인스턴스가 비활성 상태이면 자동으로 종료되는 시간(분)입니다. | 120 |
min_idle_instances |
빅인트(bigint) | 인스턴스 풀에 유지할 최소 유휴 인스턴스 수입니다. | 2 |
max_capacity |
빅인트(bigint) | 클러스터 및 유휴 인스턴스에서 사용되는 두 인스턴스를 포함하여 풀에 유지할 최대 미해결 인스턴스 수입니다. | 10 |
enable_elastic_disk |
불리언 | 로컬 스토리지 자동 크기 조정: 사용하도록 설정하면 Spark 작업자가 디스크 공간이 부족할 때 이 풀의 인스턴스가 동적으로 추가 디스크 공간을 확보합니다. | true |
disk_spec |
구조체 (struct) | 모든 Spark 컨테이너에 연결된 디스크의 사양입니다. | {"disk_type": "PREMIUM_LRS","disk_count": 2,"disk_size": 100} |
preloaded_docker_images |
배열 | 풀에 미리 로드된 사용자 지정 Docker 이미지입니다. | [] |
preloaded_spark_version |
문자열 | 풀에 대해 미리 로드된 Spark 이미지 버전(정의된 경우)입니다. | 14.3.x-scala2.12 |
aws_attributes |
구조체 (struct) | AWS에서 실행되는 인스턴스 풀과 관련된 특성입니다. | null |
azure_attributes |
구조체 (struct) | Azure 실행되는 인스턴스 풀과 관련된 특성입니다. | {"availability": "ON_DEMAND_AZURE","spot_bid_max_price": -1} |
gcp_attributes |
구조체 (struct) | GCP에서 실행되는 인스턴스 풀과 관련된 특성입니다. | null |
알려진 제한 사항
- 2023년 10월 23일 이전에 삭제된 것으로 표시된 컴퓨팅 리소스는 클러스터 테이블에 표시되지 않습니다. 이로 인해
system.billing.usage테이블의 조인이 클러스터 테이블의 레코드와 일치하지 않을 수 있습니다. 모든 활성 컴퓨팅 리소스가 백필되었습니다. - 이러한 테이블에는 다목적 및 작업 컴퓨팅에 대한 레코드만 포함됩니다. 서버리스 컴퓨팅 또는 SQL 웨어하우스에 대한 레코드는 포함되지 않습니다.
- 10분 미만 동안 실행된 노드는
node_timeline테이블에 표시되지 않을 수 있습니다.
샘플 쿼리
다음 샘플 쿼리를 사용하여 일반적인 질문에 대답할 수 있습니다.
- 가장 최근의 청구 레코드를 사용하여 클러스터 레코드 조인
- 평균 사용률이 가장 높고 사용률이 가장 높은 컴퓨팅 리소스 식별
- 각 인스턴스 풀의 최신 버전 가져오기
- 인스턴스 유휴 및 활성 시간 계산
비고
이러한 예제 중 일부는 클러스터 테이블을 system.billing.usage 테이블에 조인합니다. 청구 레코드는 여러 지역에 걸쳐 있는 반면, 클러스터 레코드는 지역별로 지정되어 있어, 청구 레코드는 쿼리를 수행하는 지역의 클러스터 레코드와만 일치합니다. 다른 지역의 레코드를 보려면 해당 지역에서 쿼리를 실행하세요.
가장 최근 청구 레코드를 사용하여 클러스터 레코드 조인
이 쿼리는 시간 경과에 따른 지출을 이해하는 데 도움이 될 수 있습니다.
usage_start_time 최신 청구 기간으로 업데이트하면 청구 레코드에 대한 최신 업데이트를 받아 클러스터 데이터에 조인합니다.
각 레코드는 해당 특정 실행 중에 클러스터 소유자와 연결됩니다. 따라서 클러스터 소유자가 변경되면 클러스터가 사용된 시기에 따라 비용이 올바른 소유자에게 롤업됩니다.
SELECT
u.record_id,
c.cluster_id,
c.owned_by,
c.change_time,
u.usage_start_time,
u.usage_quantity
FROM
system.billing.usage u
JOIN system.compute.clusters c
JOIN (SELECT u.record_id, c.cluster_id, max(c.change_time) change_time
FROM system.billing.usage u
JOIN system.compute.clusters c
WHERE
u.usage_metadata.cluster_id is not null
and u.usage_start_time >= '2023-01-01'
and u.usage_metadata.cluster_id = c.cluster_id
and date_trunc('HOUR', c.change_time) <= date_trunc('HOUR', u.usage_start_time)
GROUP BY all) config
WHERE
u.usage_metadata.cluster_id is not null
and u.usage_start_time >= '2023-01-01'
and u.usage_metadata.cluster_id = c.cluster_id
and u.record_id = config.record_id
and c.cluster_id = config.cluster_id
and c.change_time = config.change_time
ORDER BY cluster_id, usage_start_time desc;
평균 사용률이 가장 높고 사용률이 가장 높은 컴퓨팅 리소스 식별
평균 CPU 사용률이 가장 높고 최고 CPU 사용률이 가장 높은 다목적 및 작업 컴퓨팅을 식별합니다.
SELECT
distinct cluster_id,
driver,
avg(cpu_user_percent + cpu_system_percent) as `Avg CPU Utilization`,
max(cpu_user_percent + cpu_system_percent) as `Peak CPU Utilization`,
avg(cpu_wait_percent) as `Avg CPU Wait`,
max(cpu_wait_percent) as `Max CPU Wait`,
avg(mem_used_percent) as `Avg Memory Utilization`,
max(mem_used_percent) as `Max Memory Utilization`,
avg(network_received_bytes)/(1024^2) as `Avg Network MB Received per Minute`,
avg(network_sent_bytes)/(1024^2) as `Avg Network MB Sent per Minute`
FROM
node_timeline
WHERE
start_time >= date_add(now(), -1)
GROUP BY
cluster_id,
driver
ORDER BY
3 desc;
각 인스턴스 풀의 최신 버전 가져오기
테이블은 instance_pools SCD2 형식으로, 기존 레코드를 업데이트하는 대신 변경할 때마다 새 레코드가 만들어집니다. 최신 버전을 얻으려면 가장 change_time큰 항목을 사용합니다.
SELECT *
FROM system.compute.instance_pools
QUALIFY row_number() OVER (
PARTITION BY workspace_id, instance_pool_id
ORDER BY change_time DESC
) = 1;
인스턴스 유휴 및 활성 시간 계산
이 쿼리는 테이블에서 상태 전환을 사용하여 각 인스턴스의 총 유휴 시간 및 활성 시간을 계산합니다 instance_events .
WITH instance_states AS (
SELECT
*,
event_time AS start_time,
lead(event_time) OVER (
PARTITION BY workspace_id, instance_id
ORDER BY event_time
) AS end_time
FROM system.compute.instance_events
WHERE event_type IN ('INSTANCE_LAUNCHING', 'STATE_TRANSITION')
)
SELECT
workspace_id,
instance_id,
instance_pool_id,
sum(if(state = 'INSTANCE_READY',
TIMESTAMPDIFF(SECOND, start_time, end_time), 0)) / 60 AS idle_minutes,
sum(if(state = 'INSTANCE_PLACED',
TIMESTAMPDIFF(SECOND, start_time, end_time), 0)) / 60 AS active_minutes
FROM instance_states
GROUP BY workspace_id, instance_id, instance_pool_id;