Мне нужно извлечь домены, поддомены и подподдомены из ссылки.
Пример https://stackoverflow.com/users/17141604/badinmaths
домен: https://stackoverflow.com/
поддомен: https://stackoverflow.com/users
подподдомен: https://stackoverflow.com/users/17141604 (даже если подподдомен странный)
https://stackoverflow.com/questions/ask
домен: https://stackoverflow.com/
поддомен: https://stackoverflow.com/questions
Здесь: нет поддомена
Я уже знаю, как извлечь домен с помощью NET.HOST, но мне нужно извлечь другие части. У меня есть большое количество URL-адресов, где я должен применить этот метод.
Там может быть лучший способ, но вы можете рассмотреть ниже.
WITH sample_table AS (
SELECT 'https://stackoverflow.com/users/17141604/badinmaths' url
UNION ALL
SELECT 'https://stackoverflow.com/questions/ask'
)
SELECT domain,
domain || paths[SAFE_OFFSET(0)] AS subdomain,
domain || paths[SAFE_OFFSET(0)] || '/' || paths[SAFE_OFFSET(1)] AS subsubdomain
FROM sample_table,
UNNEST ([STRUCT(SPLIT(url, NET.HOST(url)) AS split_url)]),
UNNEST ([STRUCT(split_url[SAFE_OFFSET(0)] || NET.HOST(url) || '/' AS domain)]),
UNNEST ([STRUCT(REGEXP_EXTRACT_ALL(split_url[SAFE_OFFSET(1)], r'(\w+)/') AS paths)]);
Результаты запроса
UNNEST ([STRUCT(*expression* AS *field_name*)])
SPLIT(url, NET.HOST(url))
возвращает массив ['https', '/questions/ask'], который будет использоваться позже для восстановления домена и поддоменов.