我有一个包含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
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
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脚本解析结果。希望你有这个想法。
1条答案
按热度按时间vxbzzdmp1#
您可以使用awk解析descripe表输出,并生成逗号分隔的sum字符串(col)作为数值列的sum\u col和所有其他列的coln\u list。在本例中,它使用goupby生成select语句。在shell中运行:
我只检查int和double列。添加更多类型。您还可以优化它并只执行一次descripe,然后使用相同的awk脚本解析结果。希望你有这个想法。