Как взорвать квантили в улье - PullRequest
1 голос
/ 19 марта 2019

Я пытаюсь получить квантили поля и хочу разбить их так, чтобы каждое значение представляло собой отдельную строку, а не все из них, образующих один массив. Сначала я вычисляю 20 квантилей, как показано ниже:

select percentile_approx(probability, 
                                       array(0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 
                                             0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 
                                             0.8, 0.85, 0.9, 0.95, 1.0)) as quantiles
from my_table

Приведенный выше код дает массив ниже:

[0,17808226409449213, +0,18250386256254247, +0,18525207046272224, +0,18800918537059694, +0,1907743631982954, 0,200154288105411, 0,30419108474685375, +0,3299437131426226, 0,352433633041806, +0,3589875791100745, 0,37581775428218006, +0,3825168120904496, +0,3966342376441502, +0,4173753044627164, 0,43268994899295316, +0,44015098935735575, 0,461413042176578, +0,4720422104416653, 0,487852850513824, 0,5050010622123932]

Но так как я хотел взорвать его, я попытался использовать представление бокового представления posexplode, как показано ниже (на самом деле, я передал вывод из приведенного выше кода):

select i, x
lateral view posexplode([0.17808226409449213, 0.18250386256254247,0.18525207046272224, 0.18800918537059694, 
                    0.1907743631982954, 0.200154288105411, 0.30419108474685375, 0.3299437131426226, 
                    0.352433633041806, 0.3589875791100745, 0.37581775428218006, 0.3825168120904496, 
                    0.3966342376441502, 0.4173753044627164, 0.43268994899295316, 0.44015098935735575, 
                    0.461413042176578, 0.4720422104416653, 0.487852850513824, 0.5050010622123932]) q as i, x

но выдает сообщение об ошибке ниже:

ParseException: "\ nextraneous input '[' ожидающий {'(', ')', 'SELECT', 'FROM', 'ADD', 'AS', 'ALL', 'ANY', 'DISTINCT', «ГДЕ», «ГРУППА», «ПО», «ГРУППИРОВАНИЕ», «КОМПЛЕКТЫ», «КУБ», «СБРОС», «ЗАКАЗ», «ОСТАВЛЕНИЕ», «ОГРАНИЧЕНИЕ», «AT», «ИЛИ», «И ',' IN ', NOT,' NO ',' EXISTS ',' BETWEEN ',' LIKE ', RLIKE,' IS ',' NULL ',' TRUE ',' FALSE ',' NULLS ',' ASC ', «DESC», «FOR», «INTERVAL», «CASE», «WHEN», «THEN», «ELSE», «END», «JOIN», «CROSS», «OUTER», «INNER», «LEFT» ',' SEMI ',' RIGHT ',' FULL ',' NATURAL ',' ON ',' PIVOT ',' LATERAL ',' WINDOW ',' OVER ',' PARTITION ',' RANGE ',' ROWS ', «UNBOUNDED», «PRECEDING», «FOLLOWING», «CURRENT», «FIRST», «AFTER», «LAST», «ROW», «WITH», «VALUES», «CREATE», «TABLE», «DIRECTORY» ',' VIEW ',' REPLACE ',' INSERT ',' DELETE ',' INTO ',' DESCRIBE ',' EXPLAIN ',' FORMAT ',' LOGICAL ',' CODEGEN ',' COST ',' CAST ', «SHOW», «TABLES», «COLUMNS», «COLUMN», «USE», «PARTITIONS», «FUNCTIONS», «DROP», «UNION», «EXCEPT», «MINUS», «INTERSECT», «TO ',' TABLESAMPLE ',' STRATIFY ',' ALTER ',' RENAME ',' ARRAY ',' MAP ',' STRUCT ',' COMMENT ',' SET ',' RESET ',' DATA ',' START ',' TRANSACTION ',' COMMIT ',' ROLLBACK ',' MACRO ',' IGNORE ',' BOTH ',' LEADING ', «TRAILING», «IF», ​​«POSITION», «EXTRACT», «+», «-», «*», «DIV», «~», «PERCENT», «BUCKET», «OUT», «OF ',' SORT ',' CLUSTER ',' DISTRIBUTE ',' OVERWRITE ',' TRANSFORM ',' REDUCE ',' SERDE ',' SERDEPROPERTIES ',' RECORDREADER ',' RECORDWRITER ',' DELIMITED ',' FIELDS ', 'TERMINATED', 'COLLECTION', 'ITEMS', 'KEYS', 'ESCAPED', 'LINES', 'SEPARATED', 'FUNCTION', 'EXTENDED', 'REFRESH', 'CLEAR', 'CACHE', 'UNCACHE ',' LAZY ',' FORMATTED ',' GLOBAL ', TEMPORARY,' OPTIONS ',' UNSET ',' TBLPROPERTIES ',' DBPROPERTIES ',' BUCKETS ',' SKEWED ',' STORED ',' DIRECTORIES ',' LOCATION ',' EXCHANGE ',' ARCHIVE ',' UNARCHIVE ',' FILEFORMAT ',' TOUCH ',' COMPACT ',' CONCATENATE ',' CHANGE ',' CASCADE ',' RESTRICT ',' CLUSTERED ',' SORTED ', «PURGE», «INPUTFORMAT», «OUTPUTFORMAT», «БАЗА ДАННЫХ», «DFS», «TRUNCATE», «ANALYZE», «COMPUTE», «LIST», «STATISTICS», «PARTITIONED», «EXTERNAL», «DEFINED» ',' REVOKE ',' GRANT ',' LOCK ', «UNLOCK», «MSCK», «REPAIR», «RECOVER», «EXPORT», «IMPORT», «LOAD», «ROLE», «ROLES», «COMPACTIONS», «PRINCIPALS», «TRANSACTIONS», «INDEX» », 'ИНДЕКС', 'ЗАМКИ', 'ВАРИАНТ', 'АНТИ', 'LOCAL', 'INPATH', сТРОКА, BIGINT_LITERAL, SMALLINT_LITERAL, TINYINT_LITERAL, integer_value, DECIMAL_VALUE, DOUBLE_LITERAL, BIGDECIMAL_LITERAL, ИДЕНТИФИКАТОР, BACKQUOTED_IDENTIFIER} (строка 3, pos 24) \ n \ n == SQL == \ n \ nВыберите i, x \ nterior view posexplode ([0.17808226409449213, 0.18250386256254247,0.18525207046272224, 0.18800918537059694, \ n --------------- --------- ^^^ \ п +0,1907743631982954, +0,200154288105411, +0,30419108474685375, +0,3299437131426226, \ п +0,352433633041806, +0,3589875791100745, 0,37581775428218006, +0,3825168120904496, \ п +0,3966342376441502, +0,4173753044627164, +0,43268994899295316, 0,44015098935735575, \ п +0,461413042176578, +0,4720422104416653, +0,487852850513824, 0.5050010622123932]) q as i, x \ n "

С другой стороны, если я создаю массив внутри posexplode, как показано ниже, он работает нормально:

select i, x
lateral view posexplode(array('a', 'b', 'c')) q as i, x

|  i|  x|
+---+---+
|  0|  a|
|  1|  b|
|  2|  c|
+---+---+

1 Ответ

1 голос
/ 19 марта 2019
select s.*, e.i, e.x
from
    (
    select percentile_approx(probability, 
                               array(0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 
                                    0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 
                                    0.8, 0.85, 0.9, 0.95, 0.99)) as quantiles
    from my_table
    ) s lateral view outer posexplode (s.quantiles) e as i, x
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...