2015-10-07 3 views
0
[{"subscription_id":"2","service_id":"2","service_name":"product1","service_category":"sms","rate_type":"high","rate_amount":101.0}] 

Я хочу извлечь «product1» из этой строки, не в состоянии написать правильное выражение для этой помощи.Как извлечь точное слово, используя регулярное выражение в таблице?

+0

Опубликуйте свои попытки решить эту проблему. – Asunez

+1

Я думаю 'REGEXP_EXTRACT ([col_name], '(? <=" Service_name ":") [^ "] +'. Но парсер JSON был бы намного удобнее. См. [This page] (http: // community. tableau.com/ideas/1276). –

+0

Спасибо за ваш ответ. Я пробовал, но получаю эту ошибку в таблице: [Cloudera] [HiveODBC] (22) Ошибка сервера: запрос возвратил ненулевой код: 10014, причина : FAILED: SemanticException [Ошибка 10014]: Строка 9: 9 Неверные аргументы '1': Нет соответствующего метода для класса org.apache.hadoop.hive.ql.udf.UDFRegExpExtract с (array>, string, int). Возможные варианты: _FUNC_ (строка, строка) _FUNC_ (строка, строка, int) – user3070796

ответ

0

Там вы идете.

Regex101.com demo here.

"service_name":"([\w]+)" - сначала проверьте литеральное «имя службы», знак двоеточия и знак открытия, а затем зафиксируйте, что внутри, до следующей отметки закрытия закрытия.

Однако, поскольку это похоже на правильный ответ JSON, вы должны использовать JSON-сериализатор вместо RegEx.

Редактировать: Согласно комментарию @ neuronaut, отредактирован избыточным \d, так как он уже закрыт '\ w'. Старая версия RegEx101 может быть найдена here, для релевантности.

+0

В этом примере '\ d' избыточен, так как' \ w' уже соответствует десятичным разрядам. Попробуйте удалить '\ d' из демонстрации regex101, и вы вы получите тот же результат. – neuronaut

+0

@neuronaut Спасибо, я обновил свой ответ, чтобы включить ваши заметки :) – Asunez

0

Я понял, что для просмотра отдельных элементов в массиве мы можем использовать следующее: arrayName.ElementName [0] в улье он даст все элементы. Чтобы использовать это в таблице, нужно передать его в функцию транзита, например: RAWSQL_STR («% 1.service_name [0]», [Service Details]).

Смежные вопросы