
BigQuery(BQ) очень полезен для анализа или обработки данных.
Он хорошо справляется с большими объемами данных. Он возвращает итоговый результат в короткие сроки.
При обработке данных иногда мы хотели бы изменить столбцы на строки.
Но чтобы использовать UNPIVOT
, мы должны написать имя каждого столбца.
Это хлопотно.
Колонки лучше задавать динамически.

Итак, сегодня я расскажу об "динамическом развороте SQL для нескольких столбцов в Bigquery".
Author

Преимущество для чтения
Вы можете понять «Динамический unpivot SQL для нескольких столбцов в Bigquery». Тогда вам не нужно беспокоиться о развороте.
UNPIVOT в BigQuery
WМы можем использовать UNPIVOT
Bigquery, как показано ниже.
Сначала подготовьте данные с несколькими столбцами.
Data
WITH Produce AS ( SELECT 'Kale' as product, 51 as Q1, 23 as Q2, 45 as Q3, 3 as Q4 UNION ALL SELECT 'Apple', 77, 0, 25, 2) SELECT * FROM Produce +---------+----+----+----+----+ | product | Q1 | Q2 | Q3 | Q4 | +---------+----+----+----+----+ | Kale | 51 | 23 | 45 | 3 | | Apple | 77 | 0 | 25 | 2 | +---------+----+----+----+----+
Затем мы устанавливаем столбцы в оператор «UNPIVOT», например «IN (Q1, Q2, Q3, Q4)».
Result
SELECT * FROM Produce UNPIVOT(sales FOR quarter IN (Q1, Q2, Q3, Q4)) +---------+-------+---------+ | product | sales | quarter | +---------+-------+---------+ | Kale | 51 | Q1 | | Kale | 23 | Q2 | | Kale | 45 | Q3 | | Kale | 3 | Q4 | | Apple | 77 | Q1 | | Apple | 0 | Q2 | | Apple | 25 | Q3 | | Apple | 2 | Q4 | +---------+-------+---------+
Reference
Но таким образом, мы должны установить имя каждого столбца.
Это займет время.

Динамическое отключение SQL для нескольких столбцов в Bigquery
Чтобы развернуть несколько столбцов, мы можем использовать функцию.
Это функция fhoffa.x.unpivot()
.
Мы можем использовать его, как показано ниже.
SQL
SELECT product, unpivotted FROM Produce a , UNNEST(fhoffa.x.unpivot(a, 'Q')) unpivotted
Тогда мы получаем следующий результат.
Result
product | unpivotted.key | unpivotted.value |
Kale | Q1 | 51 |
Kale | Q2 | 23 |
Kale | Q3 | 45 |
Kale | Q4 | 3 |
Apple | Q1 | 77 |
Apple | Q2 | 0 |
Apple | Q3 | 25 |
Apple | Q4 | 2 |
Второй параметр fhoffa.x.unpivot(a, 'Q') определяет столбцы.
В этом случае столбцы, в имени которых есть Q
, являются целевыми столбцами.
Мы получаем тот же результат с Q[1-9]
.
Эта функция была введена в 2020 году.
Это определяемая пользователем функция (UDF).
Исходный код открыт.
Таким образом, вы можете определить его в своем собственном проекте.

Заключение
Сегодня я рассказал о "динамическом преобразовании SQL для нескольких столбцов в Bigquery".
Чтобы развернуть несколько столбцов, мы можем использовать UDF fhoffa.x.unpivot()
.
Используя регулярные выражения, мы можем выбрать множество столбцов.

Есть и другие статьи о BigQuey.
Если вы заинтересованы в них, пожалуйста, прочитайте их.
Читать далее