问题描述
我需要了解我的表将使用多少内存。我知道记录的算术平均值。我知道有哪些类型的记录。但我无法理解如何计算记录的平均/最大大小。如果我获得每列记录的平均/最大大小,是否可以计算它?
解决方法
获取每列的平均/最大大小
您还可以分析表格并获取列的统计信息。
分析表:
ANALYZE TABLE tablename COMPUTE STATISTICS FOR COLUMNS;
使用描述格式:
desc formatted tablename column_name
它将打印这些数字:
data_type,min,max,num_nulls,distinct_count,avg_col_len,max_col_len,num_trues,num_falses
不幸的是,它一次只适用于一列,您需要重复 describe 命令来获取所有列的统计信息。
,我可以给你一个蜂巢表中每一行的平均值(平均值)。可以计算每行的最大/最小大小,但有点困难。
您可以使用 - 总大小(以 KB 为单位)/表数来计算平均大小。
show tblproperties tab ("totalSize") ; --result is 1117098374
select 1117098374/(1024*count(*)) row_sz_kb from tab ;
要计算单个行的大小,您需要求和-space consumed by data type of each column * length of the data in the column.
这并不容易,因为空间消耗对于不同的数据类型可能很棘手。
但是我在我的系统中看到,如果你在一个列中存储 100 个而在同一列中存储 999 个,它们所消耗的空间会有所不同。
您可以按照以下链接查看每种数据类型消耗的字节数,但我会保留它们并验证自己。
http://hadooptutorial.info/hive-data-types-examples/