适用于:
Databricks SQL
Databricks Runtime
使用 ANALYZE TABLE 语句可以:
- 计算有关特定表的存储指标,或
- 收集有关指定架构中特定表或所有表的估计统计信息。
在 COMPUTE STORAGE METRICS 表上运行以返回总存储大小。
另外,查询优化器使用估计的统计信息来生成最佳查询计划。 预测优化会自动在 Unity Catalog 管理的表上运行ANALYZE,以收集此信息。 Databricks 建议为所有 Unity Catalog 托管表启用预测优化,以简化数据维护并降低存储成本。
语法
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 列名 [,...]] |对于所有列]
如果未指定分析选项,
ANALYZE TABLE将收集表的行数和大小(以字节为单位)。NOSCAN
仅收集表的字节大小(不需要扫描整个表)。
FOR COLUMNS col [, ...] |对于所有列
收集每个指定列或每列的列统计信息,以及表统计信息。
不支持将列统计信息与
PARTITION子句结合使用。
{ FROM
|IN } schema_name指定要分析的架构的名称。 如果没有架构名称,
ANALYZE TABLES将收集当前用户有权分析的当前架构中的所有表。
计算存储指标
适用于:
Databricks Runtime 18.0 及更高版本
该 ANALYZE TABLE … COMPUTE STORAGE METRICS 命令计算表的总存储大小指标。 与优化查询性能不同 ANALYZE TABLE … COMPUTE STATISTICS ,此命令提供详细的存储细分,用于成本分析和优化。
Description
计算特定表的总存储大小指标。 此命令返回全面的存储信息,包括总字节数、活动字节数、可清空字节数、时空穿梭字节数,以及每个类别关联的文件数量。
使用此命令可识别大型表或未使用的表,优化存储成本,并了解总存储大小与活动表大小有何不同。 这对于需要跨多个表分析存储模式或跟踪一段时间内存储更改的平台管理员尤其有用。
输出指标
该命令在单个行中返回以下指标:
| 领域 | 说明 |
|---|---|
total_bytes |
表的总存储大小。 这等于事务日志大小 + 活动字节 + 可清空字节 + 时间行程字节。 |
num_total_files |
文件总数,包括增量日志文件、活动文件、可清空文件和时间旅行文件。 |
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仅包含克隆自己的元数据和增量日志文件,不包括源文件。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
输出显示:
- 总存储:1,250 个文件中的 5.37 GB
- 活动数据:在 1,000 个文件中,占 4.29 GB(当前数据表版本)
- 可清空数据:150 个文件中的 805 MB(可以使用 VACUUM 回收)
- 时序数据:268 MB,分布在 100 个文件中(用于历史查询)
COMPUTE STATISTICS 示例
> 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;