Транспонирование строк в столбцы в BigQuery (реализация Pivot)

Я хочу создать новую таблицу и поместить все пары значений Ключей с ключами в качестве имен столбцов и значений в качестве их соответствующих значений с помощью BigQuery.

пример:

**Key**                  **Value**
channel_title           Mahendra Guru    
youtube_id              ugEGMG4-MdA  
channel_id              UCiDKcjKocimAO1tV    
examId                  72975611-4a5e-11e5   
postId                  1189e340-b08f 

channel_title           Ab Live  
youtube_id              3TNbtTwLY0U  
channel_id              UCODeKM_D6JLf8jJt    
examId                  72975611-4a5e-11e5   
postId                  0c3e6590-afeb

Я хочу преобразовать его в:

**channel_title   youtube_id   channel_id         examId               postId**
Mahendra Guru   ugEGMG4-MdA  UCiDKcjKocimAO1tV  72975611-4a5e-11e5   1189e340-b08f
Ab Live         3TNbtTwLY0U  UCODeKM_D6JLf8jJt  72975611-4a5e-11e5   0c3e6590-afeb

Как это сделать с помощью BigQuery?

1 ответов


BigQuery еще не поддерживает функции поворота
Вы все еще можете сделать это в BigQuery, используя следующий подход

но во-первых, в дополнение к двум столбцам во входных данных вы должны иметь еще один столбец, который будет указывать группы строк во входных данных, которые должны быть объединены в одну строку в output

Итак, я предполагаю, что ваша входная таблица (yourTable) выглядит ниже

**id**  **Key**                  **Value**
   1    channel_title           Mahendra Guru    
   1    youtube_id              ugEGMG4-MdA  
   1    channel_id              UCiDKcjKocimAO1tV    
   1    examId                  72975611-4a5e-11e5   
   1    postId                  1189e340-b08f 

   2    channel_title           Ab Live  
   2    youtube_id              3TNbtTwLY0U  
   2    channel_id              UCODeKM_D6JLf8jJt    
   2    examId                  72975611-4a5e-11e5   
   2    postId                  0c3e6590-afeb  

Итак, сначала вы должны запустить ниже query

SELECT 'SELECT id, ' + 
   GROUP_CONCAT_UNQUOTED(
      'MAX(IF(key = "' + key + '", value, NULL)) as [' + key + ']'
   ) 
   + ' FROM yourTable GROUP BY id ORDER BY id'
FROM (
  SELECT key 
  FROM yourTable
  GROUP BY key
  ORDER BY key
) 

результат из вышеприведенного запроса будет строка, которая (если форматировать) будет выглядеть ниже

SELECT 
  id, 
  MAX(IF(key = "channel_id", value, NULL)) AS [channel_id],
  MAX(IF(key = "channel_title", value, NULL)) AS [channel_title],
  MAX(IF(key = "examId", value, NULL)) AS [examId],
  MAX(IF(key = "postId", value, NULL)) AS [postId],
  MAX(IF(key = "youtube_id", value, NULL)) AS [youtube_id] 
FROM yourTable 
GROUP BY id 
ORDER BY id

теперь вы должны скопировать результат выше (Примечание :вам не нужно его форматировать - я сделал это только для представления) и запустить его как обычный запрос

результат будет таким, как вы ожидали

id  channel_id          channel_title   examId              postId          youtube_id   
1   UCiDKcjKocimAO1tV   Mahendra Guru   72975611-4a5e-11e5  1189e340-b08f   ugEGMG4-MdA  
2   UCODeKM_D6JLf8jJt   Ab Live         72975611-4a5e-11e5  0c3e6590-afeb   3TNbtTwLY0U  

обратите внимание: вы можете пропустить Шаг 1 Если вы можете построить правильный запрос (как в шаге 2) и количество полей невелико и постоянно, или если это один раз сделка. Но Шаг 1 раз вспомогательный шаг, который делает его для вас, так что вы можете создать его быстро в любое время!

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

как масштабировать поворот в BigQuery?
Обратите внимание – существует ограничение 10k столбцов на таблицу-поэтому вы ограничены 10k организациями.
Вы также можете увидеть ниже в качестве упрощенных примеров (если выше один слишком сложный/подробный):
как транспонировать строки в столбцы с большим объемом данных в BigQuery / SQL?
как создать фиктивные столбцы переменных для тысяч категорий в Google BigQuery?
Pivot повторяющиеся поля в BigQuery