估计表大小

了解表的大小有助于有效管理资源和优化查询性能。 在本文中,你将了解不同的方法估计表大小以及如何有效地使用它们。

引入数据的原始大小

使用 .show table details 来估计表的原始数据大小。 有关示例,请参阅使用 .show table details

此命令基于数据以 CSV 格式进行传输这一假设,估计引入到表中的数据的解压缩大小。 通过考虑数值的字符串表示形式,估计基于数值(例如整数、长整型、日期/时间和 guid)的近似长度。

示例用例:跟踪一段时间内传入数据的大小,做出有关容量规划的明智决策。

以访问字节表示的表大小

使用 estimate_data_size()sum() 聚合函数,基于数据类型及其各自的字节大小估计表大小。 有关示例,请参阅使用 estimate_data_size()

此方法考虑数值的字节大小而不将其格式化为字符串,从而提供更精确的估计。 例如,整数值需要 4 个字节,而长整型和日期/时间值需要 8 个字节。 使用此方法可以准确地估计适合内存的数据大小。

示例用例:根据要扫描的字节确定查询成本。

多个表的合并大小

可以使用 union 运算符以及 estimate_data_size()sum() 函数,根据访问字节估计多个表的合并大小。 有关示例,请参阅将 union 与 estimate_data_size() 配合使用

示例用例:评估将多个表中的数据合并到单个数据集中的内存要求。

注意

此方法可能会因空列而增加估计的数据大小,因为 union 会合并指定表中的所有列,而 estimate_data_size() 会在计算数据大小时考虑空列。

示例

使用 .show table details

以下查询估计 StormEvents 表的原始数据大小。

.show table StormEvents details
| project TotalOriginalSize

输出

TotalOriginalSize
60192011

提示

若要将字节结果格式化为 MBGB 或其他单位,请使用 format_bytes()

使用 estimate_data_size()

以下查询估计 StormEvents 表的原始数据大小(以字节为单位)。

StormEvents
| extend sizeEstimateOfColumn = estimate_data_size(*)
| summarize totalSize=sum(sizeEstimateOfColumn)

输出

totalSize
58608932

注意

即使针对同一张表完成计算,输出也较小。 这是因为此方法考虑数值的字节大小而不将其格式化为字符串,从而提供了更精确的估计。

将 union 与 estimate_data_size() 配合使用

以下查询基于 Samples 数据库中的所有表估计数据大小。

union withsource=_TableName *
| extend sizeEstimateOfColumn = estimate_data_size(*)
| summarize totalSize=sum(sizeEstimateOfColumn)
| extend sizeGB = format_bytes(totalSize,2,"GB")
totalSize sizeGB
1761782453926 1640.79 GB