Как адресовать категорию к полю, выбранному в запросе? - PullRequest
0 голосов
/ 04 июля 2019

Не уверен, если это возможно, но у меня есть таблица, которая выглядит следующим образом:

URL | amount | date | ...........

Значением URL может быть URL, который выглядит следующим образом:

https://www.example.com/category1/subcategory1/....... | 1243 | 01-01-1999
https://www.example.com/category1/subcategory2/....... | 4325 | 01-02-1999
https://www.example.com/category1/subcategory2/....... | 23 | 01-02-1999
https://www.example.com/category2/subcategory1/....... | 12543 | 01-01-1999
https://www.example.com/category2/subcategory2/....... | 124453 | 01-01-1999

Как получить результат, когда я группирую / классифицирую URL-адреса, уже содержащиеся в запросе? результат, который я ищу:

category1 | average(amount) | 01-01-1999
category1 | average(amount) | 01-02-1999
category2 | average(amount) | 01-01-1999

Работа в Google BigQuery и поиск примера запроса, который мог бы сделать это.

Ответы [ 3 ]

1 голос
/ 04 июля 2019

Ниже для BigQuery Standard SQL

#standardSQL
SELECT 
  REGEXP_EXTRACT(url, CONCAT(r'', NET.REG_DOMAIN(url), '/([^/]*)/')) AS category, 
  AVG(amount) AS avg_amount, date
FROM `project.dataset.table`
GROUP BY category, date

Обратите внимание, что вышеупомянутое решение также охватывает случаи, как показано ниже

www.example.com/category2/subcategory2/......., 124453, '01-01-1999' 
0 голосов
/ 04 июля 2019
  1. Создать временную таблицу
declare @t table (category varchar, amount bigint, date date)
  1. Вставить обработанные данные из исходной таблицы.
 insert into @t
 select f_findSring(column1) -- this function returns category1, category2 and so...
       ,amount
       ,date
  1. Запрос из временной таблицы
 select category
        ,average(amount)
        ,date
from @t
group by category, date
0 голосов
/ 04 июля 2019

Если мы разделим URL на '/', то это будет четвертый элемент. Итак:

select split(url, '/')[ordinal(4)] as category, date, avg(amount)
from t
group by category, date;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...