注意
要取得此表格,您的區域必須支援預測優化。 請參閱 Azure Databricks 區域。
本文概述預測優化作業記錄數據表架構,並提供範例查詢。 預測優化可將數據配置優化,以達到尖峰效能和成本效益。 系統數據表會追蹤這項功能的作業歷程記錄。 如需預測優化的資訊,請參閱
資料表路徑:此系統資料表位於 system.storage.predictive_optimization_operations_history。
配送考量
- 預測優化系統的表格會在兩小時內更新。 然而,帳單資訊可能需要長達24小時才能填入資料。
- 預測性優化可能會在相同的叢集上執行多個作業。 如果是,則將每個操作所分配的 DBU 份額進行近似計算。 這就是為什麼
usage_unit設定為ESTIMATED_DBU。 不過,在叢集上消耗的 DBU 總數將會是準確的。
預測優化數據表架構
預測優化作業歷程記錄系統數據表會使用下列架構:
| 欄位名稱 | 資料類型 | 描述 | 範例 |
|---|---|---|---|
account_id |
字串 | 帳戶的 ID。 | 11e22ba4-87b9-4cc2-9770-d10b894b7118 |
workspace_id |
字串 | 預測優化執行作業的工作區標識碼。 | 1234567890123456 |
start_time |
時間戳記 | 作業開始的時間。 時區資訊會記錄在值結尾,+00:00 表示 UTC。 |
2023-01-09 10:00:00.000+00:00 |
end_time |
時間戳記 | 作業結束的時間。 時區資訊會記錄在值結尾,+00:00 表示 UTC。 |
2023-01-09 11:00:00.000+00:00 |
metastore_name |
字串 | 優化數據表所屬之中繼存放區的名稱。 | metastore |
metastore_id |
字串 | 優化資料表所屬的中繼存放區識別碼。 | 5a31ba44-bbf4-4174-bf33-e1fa078e6765 |
catalog_name |
字串 | 優化數據表所屬目錄的名稱。 | catalog |
schema_name |
字串 | 優化數據表所屬的架構名稱。 | schema |
table_id |
字串 | 已優化資料表的 ID。 | 138ebb4b-3757-41bb-9e18-52b38d3d2836 |
table_name |
字串 | 優化數據表的名稱。 | table1 |
operation_type |
字串 | 優化操作完成。 必須是以下其中一個值:COMPACTION、、VACUUM、ANALYZECLUSTERINGAUTO_CLUSTERING_COLUMN_SELECTIONDATA_SKIPPING_COLUMN_SELECTION或。COMPATIBILITY_MODE_REFRESH |
COMPACTION |
operation_id |
字串 | 優化作業的標識碼。 | 4dad1136-6a8f-418f-8234-6855cfaff18f |
operation_status |
字串 | 優化作業的狀態。 必須是以下其中一個值: SUCCESSFUL 或 FAILED: INTERNAL_ERROR。 |
SUCCESSFUL |
operation_metrics |
map[string, string] | 已執行之特定優化的其他詳細數據。 請參閱 作業計量。 | {"number_of_output_files":"100","number_of_compacted_files":"1000","amount_of_output_data_bytes":"4000","amount_of_data_compacted_bytes":"10000"} |
usage_unit |
字串 | 此作業所產生的使用單位。 必須是以下值: ESTIMATED_DBU。 |
ESTIMATED_DBU |
usage_quantity |
十進位 | 此作業所使用的使用量單位數量。 | 2.12 |
作業計量
operation_metrics 資料列中記錄的計量會根據作業類型而有所不同:
| 營運名稱 | 操作說明 | 營運指標 | 說明 |
|---|---|---|---|
COMPACTION |
藉由優化檔案大小來改善查詢效能。 請參閱 優化數據檔配置。 | number_of_compacted_files |
此操作移除的檔案數量。 |
amount_of_data_compacted_bytes |
此操作移除的位元組數量。 | ||
number_of_output_files |
此操作新增的檔案數量。 | ||
amount_of_output_data_bytes |
此操作新增的位元組數。 | ||
VACUUM |
藉由刪除數據表不再參考的數據檔來降低記憶體成本。 請參閱 使用真空移除未使用的數據檔。 | number_of_deleted_files |
在此操作中被垃圾回收的檔案數量。 |
amount_of_data_deleted_bytes |
此操作所進行垃圾回收的位元組數量。 | ||
ANALYZE |
觸發統計數據的累加式更新,以改善查詢效能。 請參閱 ANALYZE TABLE。 | amount_of_scanned_bytes |
此操作掃描的位元組數量。 |
number_of_scanned_files |
此操作掃描的檔案數量。 | ||
staleness_percentage_reduced |
在此操作後陳舊百分比的減少。 這個統計值根據執行頻率 ANALYZE ,範圍可從0到100不等。 |
||
CLUSTERING |
觸發已啟用資料表的增量分群處理。 請參閱 針對數據表使用液體叢集。 | number_of_removed_files |
此操作移除的檔案數量。 |
number_of_clustered_files |
此操作新增的檔案數量。 | ||
amount_of_data_removed_bytes |
此操作移除的位元組數量。 | ||
amount_of_clustered_data_bytes |
此操作新增的位元組數。 | ||
AUTO_CLUSTERING_COLUMN_SELECTION |
評估是否演化聚類柱。 請參閱 自動液體群集。 | old_clustering_columns |
先前的資料配置,可能是舊的叢集鍵,或未分割時為「無」。 |
new_clustering_columns |
此操作套用了新的分群欄。 | ||
has_column_selection_changed |
此操作是否改變了聚類欄。 | ||
additional_reason |
群組欄位變動或未改變的原因。 | ||
DATA_SKIPPING_COLUMN_SELECTION |
偵測缺少資料、跳過工作負載統計資料的欄位並補填。 詳見資料跳過。 | amount_of_scanned_bytes |
此操作掃描的位元組數量。 |
number_of_scanned_files |
此操作掃描的檔案數量。 | ||
added_data_skipping_columns |
此操作新增了資料跳過欄位的功能。 | ||
removed_data_skipping_columns |
此操作所移除的是被跳過的資料欄位。 | ||
old_data_skipping_columns |
先前跳過資料欄位的完整清單。 | ||
new_data_skipping_columns |
目前資料略過欄位的詳盡清單。 | ||
COMPATIBILITY_MODE_REFRESH |
偵測相容模式是否過時並刷新表格。 請參閱 相容模式。 | N/A | 相容模式的刷新操作。 |
查詢範例
下列各節包含可用來深入瞭解預測優化系統數據表的範例查詢。 若要讓這些查詢能夠運作,您必須將參數值取代為您自己的值。
本文包含下列範例查詢:
- 過去 30 天內有多少估計 DBU 使用了預測性優化?
- 在過去30天內,哪些數據表是預測優化花費最多的(估計成本)?
- 預測優化在哪些數據表上執行最多作業?
- 針對指定的目錄,已壓縮多少個字節總數?
- 哪些數據表已清空最多位元組?
- 透過預測優化執行的作業成功率是多少?
過去 30 天內有多少估計 DBU 使用了預測性優化?
SELECT SUM(usage_quantity)
FROM system.storage.predictive_optimization_operations_history
WHERE
usage_unit = "ESTIMATED_DBU"
AND timestampdiff(day, start_time, Now()) < 30;
若要尋找特定 ETL 管線的相同值,您可以先在該管線中尋找資料表,然後搜尋 DBU:
-- Find all full table names for the pipeline:
WITH pipeline_mapping AS (
SELECT DISTINCT target_table_full_name AS target_table_name
FROM system.access.table_lineage
WHERE entity_type = 'PIPELINE' AND entity_id = :pipeline_id
)
-- Select all operations for any table in that pipeline:
SELECT SUM(usage_quantity)
FROM system.storage.predictive_optimization_operations_history
WHERE
CONCAT_WS('.', catalog_name, schema_name, table_name)
IN ( SELECT target_table_name FROM pipeline_mapping)
AND usage_unit = "ESTIMATED_DBU"
AND timestampdiff(day, start_time, Now()) < 30;
預測優化在過去30天內在哪些資料表的花費最多(估計成本)?
SELECT
metastore_name,
catalog_name,
schema_name,
table_name,
SUM(usage_quantity) as totalDbus
FROM system.storage.predictive_optimization_operations_history
WHERE
usage_unit = "ESTIMATED_DBU"
AND timestampdiff(day, start_time, Now()) < 30
GROUP BY ALL
ORDER BY totalDbus DESC;
哪些資料表在預測優化中執行最多操作?
SELECT
metastore_name,
catalog_name,
schema_name,
table_name,
operation_type,
COUNT(DISTINCT operation_id) as operations
FROM system.storage.predictive_optimization_operations_history
GROUP BY ALL
ORDER BY operations DESC;
針對指定的目錄,已壓縮多少個字節總數?
SELECT
schema_name,
table_name,
SUM(operation_metrics["amount_of_data_compacted_bytes"]) as bytesCompacted
FROM system.storage.predictive_optimization_operations_history
WHERE
metastore_name = :metastore_name
AND catalog_name = :catalog_name
AND operation_type = "COMPACTION"
GROUP BY ALL
ORDER BY bytesCompacted DESC;
哪個資料表清除的位元組最多?
SELECT
metastore_name,
catalog_name,
schema_name,
table_name,
SUM(operation_metrics["amount_of_data_deleted_bytes"]) as bytesVacuumed
FROM system.storage.predictive_optimization_operations_history
WHERE operation_type = "VACUUM"
GROUP BY ALL
ORDER BY bytesVacuumed DESC;
透過預測優化執行的作業成功率是多少?
WITH operation_counts AS (
SELECT
COUNT(DISTINCT (CASE WHEN operation_status = "SUCCESSFUL" THEN operation_id END)) as successes,
COUNT(DISTINCT operation_id) as total_operations
FROM system.storage.predictive_optimization_operations_history
)
SELECT successes / total_operations as success_rate
FROM operation_counts;