Databricks成本自動化審計與優(yōu)化)
在 Databricks 上進行大規(guī)模數(shù)據(jù)處理和機器學習時賬單費用常常是團隊最關心也最頭疼的問題。集群配置不合理、作業(yè)運行時間過長、存儲成本失控……這些因素都可能讓云成本在不知不覺中飆升。本文將圍繞“Databricks 成本優(yōu)化”這一核心主題深入探討如何利用 Codex 或 Claude Code 這類 AI 輔助工具對 Databricks 的支出進行審計、分析和優(yōu)化。無論你是數(shù)據(jù)工程師、數(shù)據(jù)分析師還是團隊管理者都能從本文中找到一套可落地的成本管控實操方案涵蓋從賬單分析、SQL 優(yōu)化到自動化監(jiān)控的全流程。1. 背景與核心概念為什么需要 Databricks 成本優(yōu)化Databricks 作為領先的 Lakehouse 平臺集成了數(shù)據(jù)工程、數(shù)據(jù)科學和商業(yè)分析但其按需付費DBU 底層云資源的模式使得成本管理變得復雜且關鍵。許多團隊在項目初期往往優(yōu)先關注功能實現(xiàn)而忽視了成本控制導致在項目規(guī)模擴大后云賬單成為沉重的財務負擔。FinOps云財務運維理念應運而生它強調(diào)技術、財務和業(yè)務團隊的協(xié)作旨在實現(xiàn)云支出的可預測性和優(yōu)化。Databricks 成本優(yōu)化正是 FinOps 實踐中的重要一環(huán)。其核心目標并非一味地削減成本而是確保每一分錢都花在刀刃上即在滿足性能和業(yè)務需求的前提下實現(xiàn)資源利用率的最大化。傳統(tǒng)的成本優(yōu)化依賴于人工查看賬單、分析日志不僅耗時耗力而且難以發(fā)現(xiàn)深層次的優(yōu)化點。而Codex如 OpenAI Codex或 Claude CodeAnthropic 的代碼助手這類 AI 編程助手能夠通過自然語言理解我們的意圖快速生成用于審計和分析的 SQL 查詢、Python 腳本甚至自動識別代碼中的低效模式從而將工程師從繁瑣的重復性工作中解放出來聚焦于更高價值的優(yōu)化策略制定。簡單來說我們將要探討的路徑是利用 AI 輔助工具自動化、智能化地執(zhí)行 Databricks 成本審計任務將 FinOps 實踐落地。2. 環(huán)境準備與版本說明在開始之前我們需要確保擁有合適的環(huán)境和權限。以下清單是進行成本審計的基礎Databricks 工作區(qū)訪問權限你需要擁有對目標 Databricks 工作區(qū)的訪問權限最好是具有查看賬單和使用情況Usage頁面的權限或者能訪問底層的云服務商如 AWS Cost Explorer, Azure Cost Management賬單數(shù)據(jù)。AI 編程助手本文方法的核心工具。你可以選擇Claude Code通常作為 IDE如 VS Code插件或桌面應用使用。確保其已正確安裝并配置了有效的 API 密鑰。OpenAI Codex通過 GitHub Copilot 等集成同樣需要在 IDE 中完成配置。其他具備代碼生成能力的 AI 助手如通義靈碼等。開發(fā)環(huán)境IDE推薦 VS Code因其擁有豐富的 Databricks 和 AI 助手插件生態(tài)。Databricks CLI 或 Databricks Connect用于本地腳本與遠程 Databricks 集群的交互。Python 環(huán)境本地安裝 Python并配置好databricks-sql-connector、pandas、matplotlib等庫用于數(shù)據(jù)分析和可視化。數(shù)據(jù)源權限確保你的賬號有權查詢 Databricks 系統(tǒng)表如system.billing.usage或已接入的云賬單明細表。這是成本數(shù)據(jù)的來源。版本說明本文的示例和思路基于通用的 Databricks 架構和 AI 助手能力不依賴于特定版本。實際操作時請根據(jù)你使用的 Databricks 運行時版本、AI 工具版本以及云服務商AWS/Azure/GCP的細微差異進行調(diào)整。核心在于掌握方法論和查詢模式。3. 核心審計維度與優(yōu)化策略拆解在進行自動化審計之前我們必須明確要從哪些維度分析 Databricks 的成本。以下是幾個最關鍵的審計方向3.1 集群成本分析集群包括 All-Purpose 交互式集群和 Job 集群是 Databricks 成本的主要構成部分。審計重點包括閑置集群創(chuàng)建后長時間處于“Running”狀態(tài)但無任何任務執(zhí)行的集群。資源配置過高為簡單任務配置了遠超所需的 CPU/內(nèi)存的節(jié)點類型。自動終止策略缺失交互式集群未設置自動終止時間導致非工作時間持續(xù)計費。Spot 實例使用率低對于容錯性高的作業(yè)未充分利用價格更低的 Spot 實例AWS或低優(yōu)先級 VMAzure。3.2 作業(yè)與 Notebook 運行效率分析低效的代碼和配置會導致作業(yè)運行時間過長直接增加 DBU 消耗。長尾作業(yè)識別運行時間異常長的作業(yè)分析其瓶頸如數(shù)據(jù)傾斜、Shuffle 溢出。Notebook 代碼優(yōu)化檢查是否存在重復計算、未過濾的全表掃描、低效的 Join 操作等。調(diào)度頻率過高作業(yè)調(diào)度間隔是否遠小于數(shù)據(jù)更新頻率造成了不必要的空跑。3.3 存儲成本分析Databricks 的存儲成本對象存儲如 S3/ADLS常常被忽視。舊數(shù)據(jù)與中間表識別長期不再訪問的 Delta 表或中間數(shù)據(jù)考慮歸檔或刪除。小文件問題大量的小文件會顯著降低查詢性能并增加存儲列表操作成本。未啟用數(shù)據(jù)壓縮與整理未對 Delta 表進行定期的OPTIMIZE和VACUUM操作。3.4 用戶與組別成本分攤在團隊協(xié)作中需要將成本歸屬到具體的部門、項目或用戶。按標簽Tags分攤成本審計集群、作業(yè)、存儲資源是否正確配置了云服務商或 Databricks 的標簽如project,department。高消耗用戶識別找出 DBU 消耗最高的用戶或服務賬號分析其使用模式。4. 實戰(zhàn)利用 Claude Code 構建自動化成本審計腳本接下來我們將通過一個完整的實戰(zhàn)案例演示如何與 Claude Code 協(xié)作一步步創(chuàng)建出成本審計腳本。我們的目標是生成一個 Python 腳本該腳本能連接到 Databricks運行一系列預定義的審計 SQL并生成一份 HTML 報告。假設場景我們擁有一個 Databricks 工作區(qū)并且已經(jīng)將云賬單明細或 Databricks 使用情況數(shù)據(jù)同步到了一個名為finance.cost_usage_detail的 Delta 表中。4.1 項目結構與依賴首先在本地創(chuàng)建一個項目文件夾并初始化一個 Python 虛擬環(huán)境。mkdir databricks-cost-audit cd databricks-cost-audit python -m venv venv # Windows: venv\Scripts\activate # Mac/Linux: source venv/bin/activate創(chuàng)建requirements.txt文件并讓 Claude Code 幫助我們填充內(nèi)容。我們可以向 Claude Code 提問“我需要一個 Python 項目的 requirements.txt用于連接 Databricks、執(zhí)行 SQL、進行數(shù)據(jù)分析pandas并生成 HTML 報告。請列出必要的庫及其常用版本。”Claude Code 可能會生成如下內(nèi)容# requirements.txt databricks-sql-connector2.0.0 pandas1.5.0 numpy1.23.0 plotly5.13.0 # 用于交互式圖表 jinja23.1.0 # 用于HTML報告模板 python-dotenv0.19.0 # 用于管理環(huán)境變量然后安裝依賴pip install -r requirements.txt。4.2 配置連接與輔助函數(shù)創(chuàng)建config.py文件用于安全地管理連接信息。我們可以用 Claude Code 生成一個模板“寫一個 Python 的 config.py使用 python-dotenv 從.env文件讀取 Databricks 服務器主機名、HTTP 路徑和個人訪問令牌。”Claude Code 生成的代碼# config.py import os from dotenv import load_dotenv load_dotenv() # 加載 .env 文件中的環(huán)境變量 class Config: Databricks 連接配置 DATABRICKS_SERVER_HOSTNAME os.getenv(DATABRICKS_HOST) DATABRICKS_HTTP_PATH os.getenv(DATABRICKS_HTTP_PATH) DATABRICKS_ACCESS_TOKEN os.getenv(DATABRICKS_TOKEN) # 成本相關配置 COST_DELTA_TABLE os.getenv(COST_TABLE, finance.cost_usage_detail) # 成本明細表 AUDIT_TIME_RANGE_DAYS int(os.getenv(AUDIT_DAYS, 30)) # 默認審計最近30天 classmethod def validate(cls): 驗證必要配置是否存在 required_vars [DATABRICKS_HOST, DATABRICKS_HTTP_PATH, DATABRICKS_TOKEN] missing [var for var in required_vars if not os.getenv(var)] if missing: raise ValueError(fMissing required environment variables: {missing})創(chuàng)建.env文件切記將其加入.gitignore# .env DATABRICKS_HOSTyour-workspace.cloud.databricks.com DATABRICKS_HTTP_PATH/sql/1.0/warehouses/your-warehouse-id DATABRICKS_TOKENdapiyourpersonalaccesstoken COST_TABLEfinance.cost_usage_detail AUDIT_DAYS30接下來創(chuàng)建utils.py包含數(shù)據(jù)庫連接和查詢執(zhí)行的輔助函數(shù)。我們可以向 Claude Code 描述需求“寫一個工具函數(shù)文件 utils.py包含兩個函數(shù)1.get_databricks_connection()使用 databricks-sql-connector 建立連接。2.run_audit_query(connection, query_description, sql)執(zhí)行 SQL 并返回一個包含描述和 DataFrame 結果的字典?!痹?Claude Code 的輔助下我們得到# utils.py from databricks import sql import pandas as pd from config import Config from typing import Dict, Any def get_databricks_connection(): 建立到 Databricks SQL Warehouse 的連接 Config.validate() connection sql.connect( server_hostnameConfig.DATABRICKS_SERVER_HOSTNAME, http_pathConfig.DATABRICKS_HTTP_PATH, access_tokenConfig.DATABRICKS_ACCESS_TOKEN ) return connection def run_audit_query(connection, query_description: str, sql: str) - Dict[str, Any]: 執(zhí)行審計查詢并返回結構化結果 print(f正在執(zhí)行: {query_description}) try: with connection.cursor() as cursor: cursor.execute(sql) # 獲取列名 columns [desc[0] for desc in cursor.description] # 獲取數(shù)據(jù) data cursor.fetchall() df pd.DataFrame(data, columnscolumns) return { description: query_description, sql: sql, dataframe: df, row_count: len(df) } except Exception as e: print(f查詢執(zhí)行失敗 {query_description}: {e}) return { description: query_description, sql: sql, error: str(e), dataframe: pd.DataFrame() }4.3 核心使用自然語言生成審計 SQL這是 AI 助手大顯身手的環(huán)節(jié)。我們不需要自己從頭編寫復雜的 SQL而是將審計需求描述給 Claude Code。創(chuàng)建audit_queries.py。我們向 Claude Code 輸入以下提示“我有一張 Databricks 成本明細表finance.cost_usage_detail包含字段usage_date,sku_name,dbu_quantity,cloud_cost,user_email,cluster_id,job_id,tags。請幫我生成5個用于成本審計的 SQL 查詢并給每個查詢一個簡短的描述。查詢目標如下找出最近30天內(nèi) DBU 消耗最高的前10個用戶。找出日均成本超過 $100 且最近一周有閑置無作業(yè)運行的集群。統(tǒng)計不同 SKUsku_name的成本分布。找出運行時間最長假設有execution_time_seconds字段的前10個作業(yè)。按project標簽從tagsJSON 字段中提取匯總成本?!盋laude Code 可能會生成如下 SQL 代碼塊我們將其整理到audit_queries.py中# audit_queries.py from config import Config def get_audit_queries(): 返回定義好的審計查詢列表 cost_table Config.COST_DELTA_TABLE days Config.AUDIT_TIME_RANGE_DAYS queries [ { description: Top 10 用戶按 DBU 消耗排名, sql: f SELECT user_email, SUM(dbu_quantity) as total_dbu, SUM(cloud_cost) as estimated_cost_usd FROM {cost_table} WHERE usage_date DATE_SUB(CURRENT_DATE(), {days}) AND user_email IS NOT NULL GROUP BY user_email ORDER BY total_dbu DESC LIMIT 10 }, { description: 高成本且可能閑置的集群, sql: f WITH cluster_daily_cost AS ( SELECT cluster_id, usage_date, SUM(cloud_cost) as daily_cost FROM {cost_table} WHERE usage_date DATE_SUB(CURRENT_DATE(), {days}) AND cluster_id IS NOT NULL GROUP BY cluster_id, usage_date ), cluster_avg_cost AS ( SELECT cluster_id, AVG(daily_cost) as avg_daily_cost FROM cluster_daily_cost GROUP BY cluster_id HAVING avg_daily_cost 100 -- 日均成本超過100美元 ), recent_job_runs AS ( -- 假設有一張作業(yè)運行日志表 system.compute.job_runs SELECT DISTINCT cluster_id FROM system.compute.job_runs WHERE start_time DATE_SUB(CURRENT_DATE(), 7) ) SELECT c.cluster_id, c.avg_daily_cost FROM cluster_avg_cost c LEFT JOIN recent_job_runs j ON c.cluster_id j.cluster_id WHERE j.cluster_id IS NULL -- 最近一周沒有作業(yè)運行的集群 ORDER BY c.avg_daily_cost DESC; # 注意system.compute.job_runs 是示例實際表名可能不同需調(diào)整。 }, { description: 按 SKU 統(tǒng)計成本分布, sql: f SELECT sku_name, SUM(cloud_cost) as total_cost_usd, ROUND(SUM(cloud_cost) * 100.0 / SUM(SUM(cloud_cost)) OVER (), 2) as cost_percentage FROM {cost_table} WHERE usage_date DATE_SUB(CURRENT_DATE(), {days}) GROUP BY sku_name ORDER BY total_cost_usd DESC }, { description: 運行時間最長的作業(yè) Top 10, sql: f -- 假設成本表或作業(yè)表中有執(zhí)行時間字段 SELECT job_id, user_email, AVG(execution_time_seconds) / 3600 as avg_runtime_hours, COUNT(*) as run_count FROM {cost_table} -- 或?qū)iT的作業(yè)表 WHERE usage_date DATE_SUB(CURRENT_DATE(), {days}) AND job_id IS NOT NULL AND execution_time_seconds IS NOT NULL GROUP BY job_id, user_email ORDER BY avg_runtime_hours DESC LIMIT 10 }, { description: 按項目標簽Project Tag分攤成本, sql: f SELECT -- 從JSON標簽中提取‘project’字段具體函數(shù)取決于存儲格式 GET_JSON_OBJECT(tags, $.project) as project_name, SUM(cloud_cost) as total_cost_usd FROM {cost_table} WHERE usage_date DATE_SUB(CURRENT_DATE(), {days}) AND tags IS NOT NULL AND GET_JSON_OBJECT(tags, $.project) ! GROUP BY GET_JSON_OBJECT(tags, $.project) ORDER BY total_cost_usd DESC } ] return queries關鍵點Claude Code 生成的 SQL 可能需要根據(jù)你實際的表結構進行調(diào)整。例如system.compute.job_runs和execution_time_seconds字段需要替換為實際存在的表和字段。這正是 AI 助手的價值——它提供了一個高質(zhì)量的起點工程師再基于具體環(huán)境進行微調(diào)。4.4 組裝主腳本并生成報告現(xiàn)在我們創(chuàng)建主腳本main.py串聯(lián)所有模塊。我們可以讓 Claude Code 生成報告生成的骨架“寫一個 main.py 腳本它需要1. 導入 config, utils, audit_queries。2. 建立數(shù)據(jù)庫連接。3. 循環(huán)執(zhí)行 audit_queries 中的所有查詢。4. 將所有結果收集到一個列表里。5. 使用 Jinja2 模板將這些結果生成一個簡單的 HTML 報告包含表格和圖表描述。6. 將報告保存為cost_audit_report.html。”在 Claude Code 的幫助下我們編寫main.py# main.py import sys from utils import get_databricks_connection, run_audit_query from audit_queries import get_audit_queries from jinja2 import Template import plotly.express as px import pandas as pd from datetime import datetime def generate_html_report(audit_results): 使用 Jinja2 模板生成 HTML 報告 html_template !DOCTYPE html html head titleDatabricks 成本審計報告 - {{ timestamp }}/title style body { font-family: sans-serif; margin: 40px; } h1 { color: #333; } .query-section { margin-bottom: 40px; border-bottom: 1px solid #eee; padding-bottom: 20px; } .query-desc { font-weight: bold; color: #0052CC; } table { border-collapse: collapse; width: 100%; margin-top: 10px; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #f2f2f2; } tr:nth-child(even) { background-color: #f9f9f9; } .error { color: red; } /style /head body h1 Databricks 成本審計報告/h1 p生成時間: {{ timestamp }}/p p審計時間范圍: 最近 {{ audit_days }} 天/p {% for result in results %} div classquery-section h3審計項 {{ loop.index }}: span classquery-desc{{ result.description }}/span/h3 pstrongSQL 語句:/strongbrcode{{ result.sql }}/code/p pstrong結果行數(shù):/strong {{ result.row_count }}/p {% if result.error %} p classerrorstrong錯誤:/strong {{ result.error }}/p {% else %} {% if result.row_count 0 %} {{ result.table_html | safe }} {% else %} p未查詢到相關數(shù)據(jù)。/p {% endif %} {% endif %} /div {% endfor %} /body /html template Template(html_template) # 準備模板數(shù)據(jù) for result in audit_results: if dataframe in result and not result[dataframe].empty: # 將 DataFrame 轉換為 HTML 表格只顯示前100行避免過大 result[table_html] result[dataframe].head(100).to_html(indexFalse) else: result[table_html] p無數(shù)據(jù)或查詢失敗。/p html_content template.render( resultsaudit_results, timestampdatetime.now().strftime(%Y-%m-%d %H:%M:%S), audit_days30 # 可從 config 讀取 ) return html_content def main(): 主函數(shù) print(開始 Databricks 成本審計...) # 1. 獲取連接 try: conn get_databricks_connection() except Exception as e: print(f連接 Databricks 失敗: {e}) sys.exit(1) # 2. 獲取查詢定義 queries get_audit_queries() audit_results [] # 3. 執(zhí)行所有審計查詢 for query_def in queries: result run_audit_query(conn, query_def[description], query_def[sql]) audit_results.append(result) # 4. 關閉連接 conn.close() # 5. 生成報告 print(正在生成 HTML 報告...) report_html generate_html_report(audit_results) report_filename fcost_audit_report_{datetime.now().strftime(%Y%m%d_%H%M%S)}.html with open(report_filename, w, encodingutf-8) as f: f.write(report_html) print(f審計完成報告已保存至: {report_filename}) # 6. 在控制臺簡單輸出摘要 print(\n 審計結果摘要 ) for res in audit_results: status ? if error not in res else ? print(f{status} {res[description]}: {res.get(row_count, N/A)} 行記錄) if __name__ __main__: main()4.5 運行與結果驗證在終端運行腳本python main.py如果一切配置正確腳本將依次執(zhí)行 SQL 查詢并在當前目錄下生成一個類似cost_audit_report_20231027_143022.html的文件。用瀏覽器打開該文件你將看到一個清晰的審計報告包含了每個審計項的 SQL、結果表格和行數(shù)。核心價值體現(xiàn)整個腳本的骨架、SQL 查詢、工具函數(shù)和報告模板大部分內(nèi)容都可以通過與 Claude Code 的自然語言交互快速生成。工程師的角色從“碼農(nóng)”轉變?yōu)椤靶枨竺枋稣摺焙汀按a審查/調(diào)整者”極大提升了開發(fā)效率。5. 常見問題與排查思路在實施上述方案時你可能會遇到一些典型問題。以下是一個快速排查指南問題現(xiàn)象可能原因解決思路databricks-sql-connector連接失敗提示認證錯誤1. Personal Access Token 無效或過期。2. HTTP Path 不正確未指向 SQL Warehouse。3. 網(wǎng)絡策略阻止連接。1. 在 Databricks 控制臺重新生成 Token。2. 確認 HTTP Path 來自已啟動的 SQL Warehouse 的連接詳情頁。3. 檢查本地網(wǎng)絡或云服務商安全組/NSG 規(guī)則。執(zhí)行 SQL 查詢時報錯TABLE_OR_VIEW_NOT_FOUND1. 成本明細表finance.cost_usage_detail不存在。2. 當前連接用戶沒有該表的查詢權限。1. 確認表名、數(shù)據(jù)庫名是否正確??赏ㄟ^ Databricks 數(shù)據(jù)資源管理器查看。2. 聯(lián)系管理員授予SELECT權限。查詢system.compute.job_runs等系統(tǒng)表失敗系統(tǒng)表的名稱、結構或可訪問性因 Databricks 版本和權限而異。1. 查詢SHOW TABLES IN system查看可用的系統(tǒng)表。2. 查閱官方文檔獲取正確的系統(tǒng)表名和字段。3. 考慮使用工作區(qū)級別的審計日志Audit Logs替代。Claude Code 生成的 SQL 語法錯誤1. AI 對特定 Databricks 方言如 Delta Lake SQL 擴展不熟悉。2. 表結構假設與實際不符。1. 將錯誤信息反饋給 Claude Code讓它修正。2. 手動調(diào)整 SQL使其符合 Databricks SQL 語法。這是 AI 輔助編程的常態(tài)需要人工復核和修正。HTML 報告中的表格顯示混亂或為空1. 查詢結果 DataFrame 為空。2. Jinja2 模板渲染 DataFrame 時格式錯誤。1. 檢查對應 SQL 的查詢條件確認在指定時間范圍內(nèi)有數(shù)據(jù)。2. 在main.py中調(diào)試打印result[dataframe].head()查看數(shù)據(jù)。6. 最佳實踐與工程建議將 AI 輔助的成本審計腳本化只是第一步要使其成為可持續(xù)的 FinOps 實踐還需要遵循以下最佳實踐安全第一權限最小化用于審計的服務賬號或 Personal Access Token 應僅具有只讀權限僅限于查詢成本表和必要的系統(tǒng)表。絕對不要將高權限 Token 硬編碼在腳本中或提交到版本控制系統(tǒng)。始終使用.env文件或云服務商的秘密管理器如 AWS Secrets Manager, Azure Key Vault。數(shù)據(jù)源可靠性確保成本明細數(shù)據(jù)是準確、完整和及時更新的。可以考慮使用 Databricks 提供的System Tables特別是system.billing.usage或云服務商的Cost and Usage Report (CUR)并通過 ETL 管道定期同步到 Delta 表中。審計腳本的工程化模塊化設計如本文所示將配置、查詢、工具、主邏輯分離便于維護和擴展。添加日志使用 Pythonlogging模塊替代print記錄信息、警告和錯誤便于后續(xù)排查。參數(shù)化通過命令行參數(shù)或配置文件支持動態(tài)調(diào)整審計時間范圍、成本閾值等。錯誤處理與重試對網(wǎng)絡波動或查詢超時添加重試機制。從審計到自動化治理定時任務使用 Apache Airflow、Databricks Jobs 或云函數(shù)如 AWS Lambda定期如每周一運行審計腳本并將報告發(fā)送到團隊郵箱或 Slack/Teams 頻道。設置告警在審計腳本中集成邏輯當發(fā)現(xiàn)“閑置高成本集群”或“用戶單日消耗突增”等異常情況時自動觸發(fā)郵件或即時通訊工具告警。閉環(huán)優(yōu)化審計報告應能指導具體行動。例如識別出的閑置集群應立即通知所有者確認并關機對于低效作業(yè)安排代碼優(yōu)化會議。與 Claude Code 協(xié)作的進階技巧提供上下文在提問時將你的表結構DESCRIBE TABLE finance.cost_usage_detail或部分樣例數(shù)據(jù)提供給 Claude Code它能生成更準確的 SQL。迭代優(yōu)化不要期望一次生成完美代碼。先讓 AI 生成基礎版本然后根據(jù)運行錯誤或業(yè)務需求要求其進行修正和優(yōu)化。生成解釋可以要求 Claude Code 不僅生成 SQL還為每一行 SQL 添加注釋解釋其作用這有助于團隊知識共享和代碼審查。通過結合 AI 工具的高效代碼生成能力和工程師的業(yè)務洞察與審核能力Databricks 成本優(yōu)化可以從一項艱巨的臨時任務轉變?yōu)橐粋€可持續(xù)、自動化、數(shù)據(jù)驅(qū)動的常規(guī)運維流程。這不僅控制了云支出更提升了整個數(shù)據(jù)團隊的資源利用意識和工程效能。