Разделите строки, разделенные запятыми, и разделите значение второго столбца на отдельные строки с помощью Bigquery

# #google-bigquery

Вопрос:

Я пытаюсь разделить столбец, содержащий строки, разделенные запятыми, на строки (простая часть), но также разделить второй столбец на количество элементов в строке, разделенной запятыми.

Ввод —

  -------------------- ----   |11710, 11830 | 10 |   -------------------- ----   |11711, 11015, 10020 | 9 |   -------------------- ----    

Ожидаемый результат

  ------ ---   |11710 | 5 |   ------ ---   |11830 | 5 |   ------ ---   |11711 | 3 |   ------ ---   |11015 | 3 |   ------ ---   |10020 | 3 |   ------ ---    

Запрос:

 #standardSQL WITH `project.dataset.table` AS (  SELECT '11710, 11830' id, 10 hours UNION ALL  SELECT '11711, 11015, 10020', 9 ) SELECT * EXCEPT(uniq_id) REPLACE(uniq_id AS id) FROM `project.dataset.table`, UNNEST(SPLIT(id)) uniq_id   

Ответ №1:

Попробуй это

 WITH data_ AS (  SELECT [11710, 11830] id, 10 hours UNION ALL  SELECT [11711, 11015, 10020], 9 ) select itm,  cast((hours/array_length(id)) as int64) as div ,  hours from data_,unnest(id) as itm   

Комментарии:

1. WITH data_ AS ( SELECT [11710, 11830] id, 10 hours UNION ALL SELECT [11711, 11015, 10020], 9 ) select itm, cast((hours/array_length(split(id))) as int64) as div , hours from data_,unnest(id) as itm

Ответ №2:

Основываясь на вашем сценарии совместного использования, вы также можете рассмотреть следующий подход.

 WITH `project.dataset.table` AS (  SELECT '11710, 11830' id, 10 hours UNION ALL  SELECT '11711, 11015, 10020', 9 )   SELECT   TRIM(VALUE) AS id,  CAST(HOURS/ARRAY_LENGTH(SPLIT(id,',')) AS INT64) AS HOURS FROM `project.dataset.table`,UNNEST(split(id,',')) AS VALUE