Как связать несколько полей массива BigQuery? - PullRequest
0 голосов
/ 23 апреля 2020

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

В этом случае есть одно поле массива для «кода продукта», второе поле массива для «количества» и третье поле массива для «цены». Все поля массива будут иметь одинаковое количество элементов.

Как создать запрос BigQuery, который извлекает код продукта, количество и цену в виде набора из трех столбцов?

1 Ответ

1 голос
/ 23 апреля 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT id, rec.*
FROM `project.dataset.table`,
UNNEST(ARRAY(    
  SELECT AS STRUCT code, quantity, price
    FROM UNNEST(code) code WITH OFFSET
    JOIN UNNEST(quantity) quantity WITH OFFSET USING(OFFSET)
    JOIN UNNEST(price) price WITH OFFSET USING(OFFSET)  
)) rec

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

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, ['product1', 'product2', 'product3'] code, [10, 20, 30] quantity, [2.99, 1.99, 0.99] price UNION ALL
  SELECT 2, ['product4', 'product5', 'product6'], [60, 50, 40], [3.99, 4.99, 5.99] 
)
SELECT id, rec.*
FROM `project.dataset.table`,
UNNEST(ARRAY(    
  SELECT AS STRUCT code, quantity, price
    FROM UNNEST(code) code WITH OFFSET
    JOIN UNNEST(quantity) quantity WITH OFFSET USING(OFFSET)
    JOIN UNNEST(price) price WITH OFFSET USING(OFFSET)  
)) rec

с выводом

Row id  code        quantity    price    
1   1   product1    10          2.99     
2   1   product2    20          1.99     
3   1   product3    30          0.99     
4   2   product4    60          3.99     
5   2   product5    50          4.99     
6   2   product6    40          5.99     
...