背景。我可以计算我的hive分区表的大小,如下所示。<即查找所有分区的大小,然后求和所需partitions>的大小
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=2021-10-11之间的test.tbl1大小为= 400+500+600 = 1500字节
有没有办法在dfs -du阶段过滤掉结果以避免手动求和?
发布于 2021-10-17 08:10:21
使用POSIX awk (例如GNU或BSD awk),您可以使用gsub函数对每行的最后一个字段($NF)进行预处理,以仅保留日期。然后,当且仅当最后一个字段($1)在定义的范围内时,才能计算第一个字段($NF)的总和。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}'
600https://stackoverflow.com/questions/69539675
复制相似问题