쿼리 기록 시스템 table 참조
Important
이 시스템 table은 공개 미리 보기에 있습니다.
table에 액세스하기 위해서는 schemasystem
에서 catalog을 사용하도록 설정해야 합니다.
사용가능 시스템 table 스키마에 대한 자세한 내용은 참조하세요.
쿼리 기록 시스템 table에 대한 정보, tableschema의 개요를 포함하여 이 문서에 포함되어 있습니다.
Important
쿼리 기록 시스템 table액세스하려면 query
schema사용하도록 설정해야 합니다. 시스템 스키마를 사용하도록 설정하는 방법에 대한 지침은 시스템 table 스키마사용을 참조하세요.
이 시스템은 Table에 에 위치해 있습니다. system.query.history
:
쿼리 기록 table를 사용하기
쿼리 기록 table에는 노트북 및 작업에 대해 SQL 웨어하우스 또는 서버리스 컴퓨팅을 사용하여 실행된 쿼리의 레코드가 포함되어 있습니다. table에는 table을 액세스하는 동일한 지역에 있는 모든 작업 영역에서 계정 전반의 기록이 포함됩니다.
기본적으로 관리자만 시스템 table액세스할 수 있습니다. 사용자 또는 그룹과 table데이터를 공유하려는 경우 Databricks는 각 사용자 또는 그룹에 대한 동적 보기를 만드는 것이 좋습니다. 동적 뷰 만들기를 참조하세요.
쿼리 기록 시스템 tableschema
쿼리 기록 table은 다음 schema을 사용합니다.
Column 이름 | 데이터 형식 | 설명 | 예시 |
---|---|---|---|
account_id |
string | 계정의 ID. | 11e22ba4-87b9-4cc2 -9770-d10b894b7118 |
workspace_id |
string | 쿼리가 실행된 where 작업 영역의 ID입니다. | 1234567890123456 |
statement_id |
string | 문의 실행을 고유하게 식별하는 ID. 이 ID를 사용하여 쿼리 기록 UI에서 문 실행을 찾을 수 있습니다. | 7a99b43c-b46c-432b -b0a7-814217701909 |
session_id |
string | Spark 세션 ID. | 01234567-cr06-a2mp -t0nd-a14ecfb5a9c2 |
execution_status |
string | 문 종료 상태. 가능한 values 옵션은 다음과 같습니다. - FINISHED : 실행이 완료됨- FAILED : 함께 제공되는 오류 메시지에 설명된 실패 원인으로 인해 실행이 실패함- CANCELED : 실행이 취소됨 |
FINISHED |
compute |
struct | 문을 실행하는 데 사용되는 컴퓨팅 리소스의 형식과 해당되는 리소스 where ID를 나타내는 구조체입니다.
type 값은 WAREHOUSE 또는 SERVERLESS_COMPUTE 입니다. |
{ type: WAREHOUSE, cluster_id: NULL, warehouse_id: ec58ee3772e8d305 } |
executed_by_user_id |
string | 문을 실행한 사용자의 ID. | 2967555311742259 |
executed_by |
string | 문을 실행한 사용자의 이메일 주소 또는 사용자 이름. | example@databricks.com |
statement_text |
string | SQL 문의 텍스트. 고객 관리형 키를 구성한 경우 statement_text 는 비어 있습니다. |
SELECT 1 |
statement_type |
string | 문 유형. 예: ALTER , COPY 및 INSERT . |
SELECT |
error_message |
string | 오류 조건을 설명하는 메시지. 고객 관리형 키를 구성한 경우 error_message 는 비어 있습니다. |
[INSUFFICIENT_PERMISSIONS] Insufficient privileges: User does not have permission SELECT on table 'default.nyctaxi_trips'. |
client_application |
string | 문을 실행한 클라이언트 애플리케이션. 예: Databricks SQL 편집기, Tableau 및 Power BI. 이 필드는 클라이언트 애플리케이션에서 제공하는 정보에서 파생됩니다. values 시간이 지남에 따라 정적 상태로 유지되어야 하지만 이를 보장할 수는 없습니다. | Databricks SQL Editor |
client_driver |
string | 문을 실행하기 위해 Azure Databricks에 연결하는 데 사용되는 커넥터. 예: Databricks SQL Driver for Go, Databricks ODBC Driver, Databricks JDBC Driver. | Databricks JDBC Driver |
total_duration_ms |
bigint | 결과 페치 시간을 제외하고 문의 총 실행 시간(밀리초). | 1 |
waiting_for_compute_duration_ms |
bigint | 컴퓨팅 리소스가 프로비전될 때까지 대기하는 데 소요된 시간(밀리초). | 1 |
waiting_at_capacity_duration_ms |
bigint | 사용 가능한 컴퓨팅 용량을 큐에서 대기하는 데 소요된 시간(밀리초). | 1 |
execution_duration_ms |
bigint | 문을 실행하는 데 소요된 시간(밀리초). | 1 |
compilation_duration_ms |
bigint | 메타데이터를 로드하고 쿼리를 최적화하는 데 소요된 시간(밀리초). | 1 |
total_task_duration_ms |
bigint | 모든 태스크 기간의 합계(밀리초)입니다. 이 시간은 모든 노드의 모든 코어에서 쿼리를 실행하는 데 소요된 결합된 시간을 나타냅니다. 여러 태스크가 병렬로 실행되는 경우 벽시계 기간보다 훨씬 길 수 있습니다. 태스크가 사용 가능한 노드를 기다리는 경우 벽시계 기간보다 짧을 수 있습니다. | 1 |
result_fetch_duration_ms |
bigint | 실행이 완료된 후 문 결과를 가져오는 데 소요된 시간(밀리초). | 1 |
start_time |
timestamp | Databricks가 요청을 수신한 시간.
Timezone 정보는 +00:00 이 UTC를 나타내는 값의 끝에 기록됩니다. |
2022-12-05T00:00:00.000+0000 |
end_time |
timestamp | 결과 페치 시간을 제외하고 문 실행이 종료된 시간.
Timezone 정보는 +00:00 이 UTC를 나타내는 값의 끝에 기록됩니다. |
2022-12-05T00:00:00.000+00:00 |
update_time |
timestamp | 진술문이 마지막으로 진행 상황을 받은 시간은 update입니다.
Timezone 정보는 +00:00 이 UTC를 나타내는 값의 끝에 기록됩니다. |
2022-12-05T00:00:00.000+00:00 |
read_partitions |
bigint | 정리 후 읽은 파티션 수. | 1 |
pruned_files |
bigint | 정리된 파일 수. | 1 |
read_files |
bigint | 정리 후 읽은 파일 수. | 1 |
read_rows |
bigint | 문이 읽은 총 행 수. | 1 |
produced_rows |
bigint | 문이 반환한 총 행 수. | 1 |
read_bytes |
bigint | 문에서 읽은 데이터의 총 크기(바이트). | 1 |
read_io_cache_percent |
int | IO 캐시에서 읽은 영구 데이터의 바이트 비율. | 50 |
from_result_cache |
부울 값 |
TRUE 는 명령문 결과가 캐시에서 페치었음을 나타냅니다. |
TRUE |
spilled_local_bytes |
bigint | 문을 실행하는 동안 디스크에 일시적으로 기록된 데이터의 크기(바이트). | 1 |
written_bytes |
bigint | 클라우드 개체 스토리지에 기록된 영구 데이터의 크기(바이트). | 1 |
shuffle_read_bytes |
bigint | 네트워크를 통해 전송된 총 데이터 양(바이트). | 1 |
query_source |
struct | 작업, Notebook 또는 대시보드와 같이 이 명령문 실행에 관련된 하나 이상의 Databricks 엔터티를 나타내는 키-값 쌍을 포함하는 구조체입니다. 이 필드는 Databricks 엔터티만 기록합니다. | { job_info: { job_id: 64361233243479 job_run_id: 887406461287882 job_task_key: “job_task_1” job_task_run_id: 110378410199121 } |
executed_as |
string | 문을 실행하는 데 권한이 사용된 사용자 또는 서비스 주체의 이름입니다. | example@databricks.com |
executed_as_user_id |
string | 문을 실행하는 데 사용된 권한을 가진 사용자 또는 서비스 주체의 ID입니다. | 2967555311742259 |
레코드에 대한 쿼리 프로필 보기
쿼리 기록 table의 레코드를 기반으로 쿼리 프로필에 접근하려면 다음 단계를 수행하세요.
- 관심 있는 레코드를 식별한 다음, 레코드의
statement_id
를 복사합니다. - 레코드의
workspace_id
를 참조하여 레코드와 동일한 작업 영역에 로그인했는지 확인합니다. - 작업 영역 사이드바에서 쿼리 기록을 클릭합니다.
-
문 ID 필드에서 레코드에
statement_id
를 붙여넣습니다. - 쿼리의 이름을 클릭합니다. 쿼리 메트릭의 개요가 나타납니다.
- 쿼리 프로필 보기를 클릭합니다.
메타스토어에서 쿼리 기록 구체화
다음 코드를 사용하여 매시간, 매일 또는 매주 실행되는 작업을 만들어 메타스토어에서 쿼리 기록을 구체화할 수 있습니다.
HISTORY_TABLE_PATH
및 LOOKUP_PERIOD_DAYS
변수를 적절하게 조정하세요.
from delta.tables import *
from pyspark.sql.functions import *
from pyspark.sql.types import *
HISTORY_TABLE_PATH = "jacek.default.history"
# Adjust the lookup period according to your job schedule
LOOKUP_PERIOD_DAYS = 1
def table_exists(table_name):
try:
spark.sql(f"describe table {table_name}")
return True
except Exception:
return False
def save_as_table(table_path, df, schema, pk_columns):
deltaTable = (
DeltaTable.createIfNotExists(spark)
.tableName(table_path)
.addColumns(schema)
.execute()
)
merge_statement = " AND ".join([f"logs.{col}=newLogs.{col}" for col in pk_columns])
result = (
deltaTable.alias("logs")
.merge(
df.alias("newLogs"),
f"{merge_statement}",
)
.whenNotMatchedInsertAll()
.whenMatchedUpdateAll()
.execute()
)
result.show()
def main():
df = spark.read.table("system.query.history")
if table_exists(HISTORY_TABLE_PATH):
df = df.filter(f"update_time >= CURRENT_DATE() - INTERVAL {LOOKUP_PERIOD_DAYS} days")
else:
print(f"Table {HISTORY_TABLE_PATH} does not exist. Proceeding to copy the whole source table.")
save_as_table(
HISTORY_TABLE_PATH,
df,
df.schema,
["workspace_id", "statement_id"]
)
main()