適用於:
Databricks SQL
Databricks Runtime
利用該 ANALYZE TABLE 陳述來:
- 針對特定資料表計算儲存指標,或
- 收集特定資料表或指定結構中所有資料表的估計統計資料。
在表格上運行 COMPUTE STORAGE METRICS 以回傳總儲存空間大小。
另外,查詢優化器會利用估計統計數據來產生最佳查詢計畫。 預測優化會自動在 Unity 目錄管理的資料表上執行 ANALYZE 以收集這些資訊。 Databricks 建議為所有 Unity 目錄受控數據表啟用預測優化,以簡化數據維護並減少記憶體成本。 請參閱 Unity 目錄受控數據表的預測性優化。
語法
ANALYZE TABLE table_name COMPUTE STORAGE METRICS
ANALYZE TABLE table_name [ PARTITION clause ]
COMPUTE [ DELTA ] STATISTICS [ NOSCAN | FOR COLUMNS col1 [, ...] | FOR ALL COLUMNS ]
ANALYZE TABLES [ { FROM | IN } schema_name ] COMPUTE STATISTICS [ NOSCAN ]
參數
-
識別要分析的數據表。 名稱不得包含 時態規格或選項規格 或路徑。 如果找不到數據表,Azure Databricks 就會引發 TABLE_OR_VIEW_NOT_FOUND 錯誤。
-
選擇性地將命令限制為分割區子集。
Delta Lake 數據表不支持這個子句。
DELTA適用於:
Databricks SQL
Databricks Runtime 14.3 LTS 和更新版本針對設置為收集統計數據的 Delta 資料表欄位,重新計算儲存在 Delta 日誌中的統計數據。
當
DELTA關鍵詞被指定時,不會收集查詢最佳化程式的一般統計資訊。Databricks 建議在為略過數據設置新的欄位後,執行
ANALYZE TABLE table_name COMPUTE DELTA STATISTICS以更新資料表中所有列的統計數據。 若要獲得最佳效能,請在 Delta 日誌更新完成之後,運行ANALYZE TABLE table_name COMPUTE STATISTICS來更新查詢計劃。[ NOSCAN | FOR COLUMNS col [,...] | 全部 [COLUMNS
如果未指定分析選項,
ANALYZE TABLE收集資料表的列數和位元組大小。NOSCAN
只需收集資料表的大小(以位元組為單位)(這不需要掃描整個資料表)。
FOR COLUMNS col [, ...] |適用於所有 COLUMNS
收集每個指定欄位的統計資料,或選擇收集每個欄位及數據表的統計資料。
欄位統計與
PARTITION子句的組合不受支援。
{ 來自
|中的 } schema_name指定要分析的架構名稱。 如果沒有架構名稱,
ANALYZE TABLES會收集目前用戶有權分析之目前架構中的所有數據表。
計算儲存度量
適用於:
Databricks 執行時間 18.0 及以上版本
此 ANALYZE TABLE … COMPUTE STORAGE METRICS 指令計算資料表的總儲存空間大小指標。 與優化查詢效能的指令不同 ANALYZE TABLE … COMPUTE STATISTICS ,這個指令提供詳細的儲存分解,方便成本分析與優化。
Description
計算特定資料表的總儲存容量指標。 此指令回傳完整的儲存資訊,包括總位元組、活躍位元組、可真空位元組及時間旅行位元組,以及每個類別相關的檔案數量。
使用此指令識別大型或未使用的資料表、優化儲存成本,並理解總儲存大小與活動資料表大小為何不同。 這對於需要分析多個資料表間儲存模式或追蹤儲存變化的平台管理員特別有用。
輸出指標
指令會以單一列回傳以下指標:
| 欄位 | 說明 |
|---|---|
total_bytes |
桌子的總儲存空間。 這等於 delta log 大小 + 活躍位元組 + 可真空位元組 + 時間旅行位元組。 |
total_num_files |
檔案總數,包括 delta log 檔案、活動檔案、可真空檔案及時間旅行檔案。 |
active_bytes |
資料表主動參考的資料檔案大小(與 sizeInBytes相同)。 |
num_active_files |
表格中主動參考的檔案總數。 |
vacuumable_bytes |
可透過執行 VACUUM 或啟用 預測優化來移除的資料大小。 |
num_vacuumable_files |
可進行優化的檔案數量。 |
time_travel_bytes |
用於回滾與 時間旅行 操作的歷史資料大小。 也稱為墓碑式位元組或故障安全位元組。 |
num_time_travel_files |
用於時間旅行的檔案數量。 |
詳細資訊
- 此指令採用遞迴清單方法來計算儲存資訊。 執行時間通常在幾分鐘內,但對於非常大的資料表,可能需要長達數小時。
- 此指令適用於 Unity Catalog 管理的資料表及外部資料表。
- 儲存指標是在指令執行時計算的,不會儲存在 Unity 目錄中或回
DESCRIBE EXTENDED傳。 - 為了追蹤儲存空間隨時間的變化,請定期執行此指令並將結果儲存在資料表中。 將此指令在多個資料表中循環執行,以分析資料資產中的儲存模式。
表格類型的考量
-
實體化視圖與串流表:
total_bytes包含資料表大小及相關元資料。 指標active_bytes不包含可吸塵的及可以進行時間操作的部分。 -
淺層複製人:
total_bytes僅包含克隆自身的元資料與 delta 日誌檔案,排除原始資料表檔案。active_bytes等於零,因為克隆會參考來源資料表的資料檔案。 - 已轉換的表格: 最近從外部轉換為受管理的資料表,可能包含跨管理與外部地點的資料。 例如,資料在回滾視窗期間會留在外部位置。 請參閱將外部資料表轉換成受控 Unity 目錄資料表。
範例
以下範例示範如何計算 ANALYZE TABLE 儲存指標並收集統計資料。
計算儲存指標範例
> ANALYZE TABLE main.my_schema.my_table COMPUTE STORAGE METRICS;
total_bytes total_num_files active_bytes num_active_files vacuumable_bytes num_vacuumable_files time_travel_bytes num_time_travel_files
----------- --------------- ------------ ---------------- ---------------- -------------------- ----------------- ---------------------
5368709120 1250 4294967296 1000 805306368 150 268435456 100
輸出結果如下:
- 總儲存空間:5.37 GB,涵蓋 1,250 個檔案
- 活動資料:4.29 GB,分布於 1,000 個檔案(目前資料表版本)
- 可真空資料:805 MB,分成 150 個檔案(可用 VACUUM)
- 時間旅行資料:268 MB,分成 100 個檔案(用於歷史查詢)
計算統計範例
> CREATE TABLE students (name STRING, student_id INT) PARTITIONED BY (student_id);
> INSERT INTO students PARTITION (student_id = 111111) VALUES ('Mark');
> INSERT INTO students PARTITION (student_id = 222222) VALUES ('John');
> ANALYZE TABLE students COMPUTE STATISTICS NOSCAN;
> DESC EXTENDED students;
col_name data_type comment
-------------------- -------------------- -------
name string null
student_id int null
... ... ...
Statistics 864 bytes
... ... ...
> ANALYZE TABLE students COMPUTE STATISTICS;
> DESC EXTENDED students;
col_name data_type comment
-------------------- -------------------- -------
name string null
student_id int null
... ... ...
Statistics 864 bytes, 2 rows
... ... ...
-- Note: ANALYZE TABLE .. PARTITION is not supported for Delta tables.
> ANALYZE TABLE students PARTITION (student_id = 111111) COMPUTE STATISTICS;
> DESC EXTENDED students PARTITION (student_id = 111111);
col_name data_type comment
-------------------- -------------------- -------
name string null
student_id int null
... ... ...
Partition Statistics 432 bytes, 1 rows
... ... ...
OutputFormat org.apache.hadoop...
> ANALYZE TABLE students COMPUTE STATISTICS FOR COLUMNS name;
> DESC EXTENDED students name;
info_name info_value
-------------- ----------
col_name name
data_type string
comment NULL
min NULL
max NULL
num_nulls 0
distinct_count 2
avg_col_len 4
max_col_len 4
histogram NULL
> ANALYZE TABLES IN school_schema COMPUTE STATISTICS NOSCAN;
> DESC EXTENDED teachers;
col_name data_type comment
-------------------- -------------------- -------
name string null
teacher_id int null
... ... ...
Statistics 1382 bytes
... ... ...
> DESC EXTENDED students;
col_name data_type comment
-------------------- -------------------- -------
name string null
student_id int null
... ... ...
Statistics 864 bytes
... ... ...
> ANALYZE TABLES COMPUTE STATISTICS;
> DESC EXTENDED teachers;
col_name data_type comment
-------------------- -------------------- -------
name string null
teacher_id int null
... ... ...
Statistics 1382 bytes, 2 rows
... ... ...
> DESC EXTENDED students;
col_name data_type comment
-------------------- -------------------- -------
name string null
student_id int null
... ... ...
Statistics 864 bytes, 2 rows
... ... ...
> ANALYZE TABLE some_delta_table COMPUTE DELTA STATISTICS;