--- Резюме ---BigQuery - Как создать новый столбец, где вычисление включает в себя новый столбец?
У меня есть три колонки: [visitorID], [ранг], [числа].
В BigQuery, Я хотел бы создать новый столбец [расчет], , который является частью суммирования [числа] и [расчет] сам, включив указанные условия.
Проблема, с которой я сталкиваюсь сейчас, заключается в том, что «в BigQuery я не могу создать столбец, который нуждается в вычислении, включая создаваемый мной столбец». Я не уверен, подходит ли моя концепция или идея, , и я надеюсь, что есть несколько лучших предложений.
--- Подробности ---
* Таблица У меня есть:
таблица с тремя столбцами: [visitorID], [ранг], [числа].
* Новая колонка мне нужно создать:
Необходимо создать столбец [расчет].
* Определение расчета:
После заказа на [visitorID] и [ранг], кнопку [Расчет] является
(я) Если [число] = 0, то [расчет ] = 0 (ii) Если [номера] <> 0, затем суммируйте текущее значение [числа] и предыдущее [расчетное] число. (iii) На основании (ii), если суммирование больше 30, тогда [расчет] = 0, ELSE [расчет] остается тем же суммарным значением.
См. Пример, как показано ниже.
* Проблема Я встречая
мне нужно использовать BigQuery, чтобы сделать этот вид расчета. Однако, что я придумал, это «функция оконных сумм», которая, как представляется, не является хорошим решением. Я думаю, что ключевым моментом является то, что «В BigQuery я не могу создать столбец, который нуждается в вычислении, включая создаваемый мной столбец».
См. Пример, как показано ниже.
То есть, для создания нового столбца всегда требуется существующее значение. У меня есть свой пример, как следует, что не может решить проблему. И вы также можете увидеть экран печати, чтобы понять, в чем проблема.
См. Пример запроса, как показано ниже.
SELECT
visitorID,
rank,
numbers,
SUM(numbers) OVER (PARTITION BY visitorID ORDER BY rank) AS window_sum_current,
SUM(numbers) OVER (PARTITION BY visitorID ORDER BY rank ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS window_sum_prec1
FROM sample_table
* Ищу предложения
Я хотел бы попросить совета. (1) В BigQuery эта проблема разрешима или нет? (2) Какой метод или понятие мне не хватает? (3) Что является лучшим способом решить проблему в BigQuery?
спасибо.
Привет, Михаил, я пробую ваш метод, который невероятно успешный. Огромное спасибо. И я обнаружил, что есть ссылка http://storage.googleapis.com/bigquery-udf-test-tool/testtool.html, где можно протестировать UDF (но до сих пор не удается найти отладчик ... сложно отладить UDF). Тем не менее, спасибо за вашу помощь. Я все еще понимаю логику, которую вы использовали (особенно, зачем использовать GROUP_COONCAT), и я обнаружил, что без использования GROUP_CONCAT, длина в элементе for-loop будет проблемой. Просто выучил фантастический урок :-) –