如何计算具有特定分区筛选器的配置单元表的大小



背景。我可以计算我的蜂窝分区表的大小,如下所示<即找到所有分区的大小,然后将所需分区的大小相加>

hdfs dfs -du 'hdfs://localhost:9090/user/temp/warehouse/test.db/tbl1'
100   hdfs://localhost:9090/user/temp/warehouse/test.db/tbl1/dt=2021-10-06
200   hdfs://localhost:9090/user/temp/warehouse/test.db/tbl1/dt=2021-10-07
300   hdfs://localhost:9090/user/temp/warehouse/test.db/tbl1/dt=2021-10-08
400   hdfs://localhost:9090/user/temp/warehouse/test.db/tbl1/dt=2021-10-09
500   hdfs://localhost:9090/user/temp/warehouse/test.db/tbl1/dt=2021-10-10
600   hdfs://localhost:9090/user/temp/warehouse/test.db/tbl1/dt=2021-10-11

我想找出特定分区之间的表的大小<即dt>=2021-10-09>

即,dt=2021-10-09到dt=20211-10-11分区之间的test.tbl1的大小为=400+500+600=1500字节

有没有办法在dfs-du阶段过滤掉结果以避免手动求和?

使用POSIX awk(例如GNU或BSD awk),您可以使用gsub函数预处理每行的最后一个字段($NF),以仅保留日期。然后,当且仅当最后一个字段($NF)在定义的范围内时,您可以计算第一个字段的和($1)。dt >= 2021-10-09:示例

$ hdfs dfs -du 'hdfs://localhost:9090/user/temp/warehouse/test.db/tbl1' |
awk -v dtmin='2021-10-09' '
{gsub(/.*=/,"",$NF)} $NF>=dtmin{sum+=$1} END{print sum}'
1500

对于封闭范围:

$ hdfs dfs -du 'hdfs://localhost:9090/user/temp/warehouse/test.db/tbl1' |
awk -v dtmin='2021-10-06' -v dtmax='2021-10-08' '
{gsub(/.*=/,"",$NF)} $NF>=dtmin && $NF<=dtmax{sum+=$1} END{print sum}'
600

最新更新