2016-07-28 3 views
4

При использовании запроса BigQuery с данными, содержащими URL-адреса, мы заметили, что функция DOMAIN ведет себя иначе, чем в случае URL-адреса.Ошибка доменов функции BigQuery Ошибка

Это может быть продемонстрировано с помощью этого простого запроса:

SELECT 
    domain('WWW.FOO.COM.AU'), 
    domain(LOWER('http://WWW.FOO.COM.AU/')), 
    domain('http://WWW.FOO.COM.AU/') 

Результат URL полной прописные, кажется, не правы и documentation не упоминается ничего о случае в URL.

Query Result

+0

я чувствую, что это ошибка при обнаружении оригинальных доменов верхнего уровня, таких как .com .net .org и т.д. - похоже, что они имеют нижнюю часть. остальное не имеет значения и переносится как есть. таким образом, та же проблема с TLD() –

ответ

1

DOMAIN (и другие функции URL-обработки в унаследованной SQL) имеют ряд ограничений, к сожалению. Хотя у нас еще нет эквивалента в standard SQL (снимите флажок «Использовать устаревший SQL» в разделе «Параметры»), вы можете составить свой собственный, который работает в других случаях с использованием регулярного выражения. Есть a number из StackOverflow questions о добыче области, и мы можем поставить один из ответов использовать как:

CREATE TEMPORARY FUNCTION GetDomain(url STRING) AS (
    REGEXP_EXTRACT(url, r'^(?:https?:\/\/)?(?:[^@\n][email protected])?(?:www\.)?([^:\/\n]+)')); 

WITH T AS (
    SELECT url 
    FROM UNNEST(['WWW.FOO.COM.AU:8080', 'google.com', 
       'www.abc.xyz', 'http://example.com']) AS url) 
SELECT 
    url, 
    GetDomain(url) AS domain 
FROM T; 

+---------------------+----------------+ 
|   url   |  domain  | 
+---------------------+----------------+ 
| www.abc.xyz   | abc.xyz  | 
| WWW.FOO.COM.AU:8080 | WWW.FOO.COM.AU | 
| google.com   | google.com  | 
| http://example.com | example.com | 
+---------------------+----------------+ 
+0

Спасибо за ответ. Анализ URL-адресов в регулярном выражении прекрасен, и большую часть времени я мог бы просто уйти от него с помощью нижнего кода URL-адреса перед применением функции. В любом случае, это не прерывание сделок, я просто надеюсь, что это может быть зарегистрировано где-то в руководстве. –

+0

Это хорошее предложение; Я отправил https://code.google.com/p/google-bigquery/issues/detail?id=638. Благодаря! –

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