hive:有没有办法获得表中所有数值列的聚合?

kiz8lqtg  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(396)

我有一个包含50多列(数字和字符)的表,有没有一种方法可以不指定每一列而获得总体统计信息?
例如: a b c d 1 2 3 4 5 6 7 8 9 10 11 12 理想情况下,我会有这样的东西: column_name min avg max sum a 1 5 9 15 b 2 6 10 18 c 3 7 11 21 d 4 8 12 24 然而,一次获得一个聚合将非常有用。
任何帮助/想法都将不胜感激。
谢谢您,
o

vxbzzdmp

vxbzzdmp1#

您可以使用awk解析descripe表输出,并生成逗号分隔的sum字符串(col)作为数值列的sum\u col和所有其他列的coln\u list。在本例中,它使用goupby生成select语句。在shell中运行:

TABLE_NAME=your_schema.your_table

NUMERIC_COLUMNS=$(hive -S -e "set hive.cli.print.header=false; describe ${TABLE_NAME};" | awk -F " " 'f&&!NF{exit}{f=1}f{ if($2=="int"||$2=="double") printf c "sum("toupper($1)") as sum_"$1}{c=","}')

GROUP_BY_COLUMNS=$(hive -S -e "set hive.cli.print.header=false; describe ${TABLE_NAME};" | awk -F " " 'f&&!NF{exit}{f=1}f{if($2!="int"&&$2!="double") printf c toupper($1)}{c=","}')

SELECT_STATEMENT="select $NUMERIC_COLUMNS $GROUP_BY_COLUMNS from $TABLE_NAME group by $GROUP_BY_COLUMNS"

我只检查int和double列。添加更多类型。您还可以优化它并只执行一次descripe,然后使用相同的awk脚本解析结果。希望你有这个想法。

相关问题