我有一个包含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
尽管如此,一次获得一个汇总将不仅仅是有用的。
任何帮助/想法都将不胜感激。
谢谢你,
答案 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脚本解析结果。希望你有主意。