Попытка UNNEST поля массива меток времени, но необходимо GROUP BY - PullRequest
1 голос
/ 06 июня 2019

У меня есть повторяющееся поле типа TIMESTAMP в таблице BigQuery.Я пытаюсь UNNEST это поле.Однако я должен сгруппировать или агрегировать поля по порядку.Я не разбираюсь в SQL, поэтому я мог бы использовать некоторую помощь.Фрагмент кода является частью более крупного запроса, который работает при замене subscription.future_renewal_dates на GENERATE_TIMESTAMP_ARRAY

subscription.future_renewal_dates - ARRAY

Массив TIMESTAMP уникален (повторяющиеся подписки) и не может бытьсгенерировано с использованием GENERATE_TIMESTAMP_ARRAY, поэтому я должен сгенерировать даты перед загрузкой в ​​BigQuery.UDF - это слишком много

1 Ответ

1 голос
/ 06 июня 2019

Когда вы делаете GROUP BY - все выражения, столбцы в SELECT (кроме тех, что в списке GROUP BY) должны использоваться с некоторой функцией агрегирования - которой у вас явно нет.Поэтому вам нужно решить, чего вы на самом деле пытаетесь достичь с помощью этой группировки

Ниже представлен вариант, который, я думаю, вы имели в виду - хотя он может быть другим - но, по крайней мере, у вас есть представление о том, какчтобы исправить это

SELECT
   subscription.amount AS subscription_amount,
   subscription.status AS subscription_status,
   "1" AS analytic_name,
   ARRAY_CONCAT_AGG( ARRAY ( 
   SELECT
      AS STRUCT FORMAT_TIMESTAMP("%x", days) AS type_value, subscription.amount AS analytic_name 
   FROM
      UNNEST(subscription.future_renewal_dates) as days 
   WHERE
      (
         days >= TIMESTAMP("2019-06-05T19:30:02+00:00") 
         AND days <= TIMESTAMP("2019-08-01T03:59:59+00:00") 
      )
)) AS forecast 
   FROM
      `mydataset.subscription` AS subscription 
   GROUP BY
      subscription_amount,
      subscription_status,
      analytic_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...