Как можно проанализировать дату как год недели в Google BigQuery? - PullRequest
0 голосов
/ 05 февраля 2020

Мне нужно выбрать два набора данных - один за последнюю неделю и один за ту же неделю прошлого года.

Я вижу эту работу, извлекая номер недели, поэтому

SELECT EXTRACT(WEEK FROM DATE_FIELD)

Затем я получаю значение года прошлого года в соответствии с прошлым понедельником, например:

SELECT DATE_SUB(
                DATE_TRUNC(DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY), WEEK(MONDAY)), 
               INTERVAL 1 YEAR)

Мне удалось объединить эти значения вместе, чтобы они представляли дату в формате % Y-% Вт. например. 2019-03

Однако использование функции PARSE_DATE(), похоже, не работает для анализа год-неделя в BigQuery. Я пробовал несколько комбинаций со строками stati c, например:

SELECT PARSE_DATE("%Y-%W", '2020-53'),
       PARSE_DATE("%Y-%W", '2019-01'),
       PARSE_DATE("%Y-%W", '2018-00')

Независимо от ввода, дата всегда выходит 1 января в указанный год

Row f0_ f1_ f2_ 
1   
2020-01-01
2019-01-01
2018-01-01

Что я делаю не так?

1 Ответ

1 голос
/ 06 февраля 2020

По поводу вашего вопроса о том, как передать дату в BigQuery в формате YEAR-WEEK , я бы посоветовал вам использовать функцию FORMAT_DATE () .

* 1006. * Эта функция использует два параметра. Первый должен быть STRING , с помощью этого параметра вы выбираете, как будет отображаться ваша дата. Вы можете следовать этому словарю , чтобы помочь вам выбрать тот, который подходит вам лучше всего. В вашем случае я бы использовал "% Y-% W" или "% Y-% V". Согласно документации:

% V: номер недели ISO 8601 года (первый день недели - понедельник) в виде десятичного числа (01-53). Если неделя, содержащая 1 января, имеет четыре или более дней в новом году, то это неделя 1; в противном случае это неделя 53 предыдущего года, а следующей неделей - неделя 1.

% W: номер недели в году (понедельник - первый день недели) в виде десятичного числа (00- 53).

Второй параметр должен иметь формат DATE .

Ниже приведен пример синтаксиса с фиктивными данными:

with a as (
select '2019-01-01' as date union all 
select '2020-10-21' as date union all
select '2018-08-15' as date 
order by date
)
select  format_date("%Y-%W", cast(date as date)) as date_w,
        format_date("%Y-%V", cast(date as date)) as date_v 
from a

Обратите внимание, что я использовал функцию CAST () для преобразования строки в формат даты. И вывод:

enter image description here

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...