对表进行分析

适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime

使用 ANALYZE TABLE 语句可以:

  1. 计算有关特定表的存储指标,或
  2. 收集有关指定架构中特定表或所有表的估计统计信息。

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 ]

参数

  • table_name

    标识要分析的表。 名称不得包含时态规范或选项规范或者路径。 如果找不到表,Azure Databricks 会引发 TABLE_OR_VIEW_NOT_FOUND 错误。

  • PARTITION 子句

    (可选)将命令限制为分区的子集。

    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;