# 모든 테이블을 자동으로 유지보수하는 잡
import datetime
# 유지보수 대상 테이블 목록 (메타데이터에서 동적으로 조회도 가능)
tables = spark.sql("""
SELECT table_catalog, table_schema, table_name
FROM system.information_schema.tables
WHERE table_catalog = 'prod'
AND table_type = 'MANAGED'
""").collect()
results = []
for t in tables:
full_name = f"{t.table_catalog}.{t.table_schema}.{t.table_name}"
try:
# OPTIMIZE
opt_result = spark.sql(f"OPTIMIZE {full_name}")
metrics = opt_result.collect()[0]
# VACUUM (30일 보존)
spark.sql(f"VACUUM {full_name} RETAIN 720 HOURS")
results.append({
"table": full_name,
"status": "SUCCESS",
"files_added": metrics.metrics.numFilesAdded,
"files_removed": metrics.metrics.numFilesRemoved,
"timestamp": datetime.datetime.now()
})
except Exception as e:
results.append({
"table": full_name,
"status": f"FAILED: {str(e)}",
"timestamp": datetime.datetime.now()
})
# 결과를 감사 테이블에 기록
results_df = spark.createDataFrame(results)
results_df.write.mode("append").saveAsTable("ops.maintenance.optimize_vacuum_log")