разделение текстовой строки на соответствующие столбцы в Presto - PullRequest
0 голосов
/ 07 марта 2019

У меня есть отчет из предварительного запроса, который дает мне информацию в строке

Необработанные данные выглядят примерно так:

c_pre=CI2UhdX95uACFcKIdwodZ8QETQ;gtm=2od241;auiddc=*;u1=cz;u10=Not
Available;u11=Not Available;u12=1;u13=Not Available;u14=SGD;u15=Not
Available;u3=pdp;u4=undefined;u6=Not Available;~oref=https://www.bbc.com/

Я нашел обходной путь Excel, который разбивает это наотдельные столбцы. скриншот прикреплен для справки

Этот процесс все еще занимает довольно много времени, и я надеялся использовать панель инструментов Presto для автоматизации этого.

Все элементыс тем же префиксом u (u3, u13 и т. д. в приведенном выше примере) должен идти в тот же столбец, в противном случае я просто сделал бы срез строки.К сожалению, разные строки имеют разные результаты в зависимости от хранимых данных, что приводит к разным префиксам u в одном и том же столбце. Снимок экрана, показывающий, почему это сбивает с толку

Запрос Excel:

=IFERROR(
RIGHT(
INDEX(RD!2:2,1,
MATCH('Data LU'!A$1&"="&"*",RD!2:2,0)),
(LEN(
INDEX(RD!2:2,1,
MATCH('Data LU'!A$1&"="&"*",RD!2:2,0)))-(LEN(A$1)+1))),"")

если это поможет

1 Ответ

2 голосов
/ 07 марта 2019

Предполагая, что вы знаете набор всех возможных префиксов, вы можете сделать что-то вроде этого:

with t as (select split_to_map(<column>,';','=') map from <table>)
select
    element_at(map, 'u1') as u1,
    element_at(map, 'u2') as u2,
    element_at(map, 'u3') as u3,
    ...
from t

К сожалению, в настоящее время (начиная с версии 304) нет способа динамически разбивать значения на отдельные столбцы.

Документацию по split_to_map и element_at можно найти здесь: https://prestosql.io/docs/current/functions/string.html#split_to_map https://prestosql.io/docs/current/functions/map.html

...