Мне нужно извлечь доменное имя из URL, используя Redshift PostgreSQL.Пример: извлеките «google.com» из «www.google.com».Каждый URL в моем наборе данных имеет свой домен верхнего уровня (TLD).Мой подход состоял в том, чтобы сначала присоединить соответствующий TLD к набору данных и использовать регулярное выражение для извлечения first_string.TLD.В Redshift я получаю сообщение об ошибке «Шаблон должен быть действительным литеральным выражением UTF-8».Есть ли способ обойти это?
Образец моего набора данных:
+---+------------------------+--------------+
| id| trimmed_domain | tld |
+---+------------------------+--------------+
| 1 | sample.co.uk | co.uk |
| 2 | www.sample.co.uk | co.uk |
| 3 | www3.sample.co.uk | co.uk |
| 4 | biz.sample.co.uk | co.uk |
| 5 | digital.testing.sam.co | co |
| 6 | sam.co | co |
| 7 | www.google.com | com |
| 8 | 1.11.220 | |
+---+------------------------+--------------+
Мой код:
SELECT t1.extracted_domain, COUNT(DISTINCT(t1.id))
FROM(
SELECT
d.id,
d.trimmed_domain,
CASE
WHEN d.tld IS null THEN d.trimmed_domain ELSE
regexp_replace(d.trimmed_domain,'(.*\.)((.[a-z]*).*'||replace(tld,'.','\.')||')','\2')
END AS "extracted_domain"
FROM dataset d
)t1
GROUP BY 1
ORDER BY 2;
Ожидаемый результат:
+------------------------+--------------+
| extracted_domain | count |
+------------------------+--------------+
| sample.co.uk | 4 |
| sam.co | 2 |
| google.com | 1 |
| 1.11.220 | 1 |
+------------------------+--------------+