Hive: есть ли способ получить агрегаты всех числовых столбцов, существующих в таблице? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть таблица, содержащая более 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

1 Ответ

0 голосов
/ 19 сентября 2019

Вы можете проанализировать вывод DESCRIBE TABLE, используя AWK, и сгенерировать разделенную запятыми строку SUM (col) в виде sum_col для числовых столбцов и column_list для всех остальных столбцов.В этом примере он генерирует оператор select с goup by.Выполнить в оболочке:

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 и двойные столбцы.Вы добавляете больше типов.Также вы можете оптимизировать его и выполнить DESCRIBE только один раз, а затем проанализировать результат, используя те же сценарии AWK.Надеюсь, у вас есть идея.

...