蜂巢:有没有一种方法可以获取表中所有数字列的汇总?

时间:2019-09-19 09:36:45

标签: hive pivot hql transpose aggregates

我有一个包含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

尽管如此,一次获得一个汇总将不仅仅是有用的。

任何帮助/想法都将不胜感激。

谢谢你,

1 个答案:

答案 0 :(得分:0)

您可以使用AWK解析DESCRIBE TABLE输出,并生成逗号分隔的SUM(col)字符串,作为数字列的sum_col和所有其他列的column_list。 在此示例中,它生成带有goup by的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列。您添加更多类型。您也可以对其进行优化,仅执行一次DESCRIBE,然后使用相同的AWK脚本解析结果。希望你有主意。