Разбор и извлечение полей из поля url в HiveQL - PullRequest
1 голос
/ 10 апреля 2020

У меня есть эти данные из таблицы:

id,uri,date_entered,p_id,ads_id
1,http://vegiefood.com/path1/p.php?keyword=veganway&country=france#Ref1,30/JUN/2016,PVEGIEFOOD,GOOGLEADSENSE
2,http://techteacher.com/path1/p.php?keyword=datascience&country=norway#Ref1,15/JAN/2018,PTECHTEACHER,GOOGLEADSENSE

Я хотел бы преобразовать или создать новую разделенную таблицу со следующими полями: fields: id, date, pub_id, advertiser_id, ключевые слова, разделение полей: хост, страна

ключевое слово = veganway

хост = vegiefood.com

страна = франция

и получите такую ​​таблицу

+-------------+---------------+-----------------+-----------------------+------------------+------------------+------------------+
| id          | date          |  pub_id         |       advertiser_id   |  keyword         |   host           | country          |
+-------------+---------------+-----------------+-----------------------+------------------+------------------+------------------+
| 1           | 30/JUN/2016   | PVEGIEFOOD      | GOOGLEADSENSE         | veganway         | vegiefood.com    | france           |
| 2           | 15/JAN/2018   | PTECHTEACHER    | GOOGLEADSENSE         | datascience      | techteacher.com  | norway           |
+-------------+---------------+-----------------+-----------------------+------------------+------------------+------------------+

У меня нет проблем с секционированными таблицами или загрузкой данных из другой таблицы, но моя проблема в том, что мне еще не удалось разобрать поле uri [http://vegiefood.com/path1/p.php?keyword=veganway&country=france#Ref1] . Я пробовал это с [regexp_extract (str, regexp [, idx]) - извлекает группу, которая соответствует regexp]

Может кто-нибудь помочь мне или дать некоторую подсказку с помощью регулярного выражения или другой функции для анализа URI?

Заранее спасибо.

1 Ответ

3 голосов
/ 10 апреля 2020

Используйте встроенную функцию parse_url_tuple для извлечения обязательных полей. Поскольку показанные URL-адреса представлены в нестандартном формате, вам, возможно, придется сделать дополнительные split, чтобы получить значение страны. В противном случае вы могли бы использовать QUERY:country в функции.

select t.*,parsed.host,parsed.keyword,split((split(query,';')[1]),'=')[1]
from tbl t
lateral view parse_url_tuple(uri,'HOST','QUERY:keyword','QUERY') parsed as host,keyword,query
...